其實此時此刻我並不知道造成這個錯誤的深層原因是什麼,也不知道問題被解決的具體道理,只是先把這種異常情況記錄一下,以防有人跟我一樣被折磨過長時間。
我希望在微博授權完成後使用session記錄token資訊,然後在建立關聯賬戶時會用到這個session,期間不可避免的會頁面跳轉。然後問題出現了,頁面在跳轉後,session丟失了,而且也不是全部丟失,因為我在session中存的是乙個陣列,最後發現陣列的key都還在,只是value不見了,而且最詭異的就是,其他地方的session都是可以正常傳遞的,只是某乙個方法不行。我查了一些資料,對比了php.ini的配置,也使用了session id,但是都沒有解決問題,最後決定從源頭入手,回頭看了一下設定session的地方
....
$key = get_qq_token($_get["code"], $_get["state"], $_session["uri"]);
if($key['access_token'] !== false)
....
我發現了設定session後呼叫的那個取user資訊的方法,這個方法使用的是php的curl函式類,向指定的url發請求。然後開始懷疑「是不是在這裡session的值被處理掉了,不知道 curl_close 這個方法會不會把當前的session值都會清空」,如前所述,原因我現在也不知道,但是這個懷疑確實幫我解決了問題,於是我把session設定延後到呼叫方法以後,即
$me = get_qq_user_info($key['access_token'], $key['openid']);
$_session['qq_keys'] = $key;
結果問題真的解決了,session正常傳遞到跳轉頁面。
雖然不知道原因,但是也許可以記住乙個竅門兒:session要在curl請求之後設定,中間穿插curl請求會使session丟失。
這個結論有待進一步考證。
關於session丟失值的問題
在 上找到這個 還不錯 備用session的問題 會話狀態將使用程序外 asp.net 狀態服務來儲存狀態資訊。而iis預設是以inproc方式來儲存session的,即儲存在 iis程序中,也就是inetinfo.exe這個程序。當inetinfo.exe程序不穩定或崩潰時,這些資訊也就會丟失。另...
php關於對cookie與session的理解
對於cookie的理解 cookie是伺服器留給客戶端的禮物 小甜點 來完成伺服器對使用者的身份驗證的一種方式 具體的來講就是,當使用者登入伺服器的時候有伺服器通過setcookie函式在客戶端的瀏覽器 裡面存上一些能標明身份的資料 使用者名稱,密碼,登入與否 等到同乙個使用者訪問該站點 的其他的網...
php中session常用函式
session start 該函式表明本頁需要使用session,如果不使用該函式,將有可能導致其他函式和session變數無法正常使用,類似於初始化函式。session register 該函式用於註冊普通變數為session變數,如 a 1 session register a session ...