1. 程式人生 > >tinkphp中session無法跨方法獲取

tinkphp中session無法跨方法獲取

我已經出現過兩次這種問題了,出現了兩次就說明第一次沒有解決徹底,所以表示thinkphp這個跨頁後session為空而無法登陸的問題牽扯很多方面的問題了。經過這兩次的研究,我覺得基本上能真正解決它了。

第一次出現的時候,我以為是目錄不可寫,檢查了半天沒發現問題,於是各種百度,才發現別人也有遇得類似問題,就是跨頁傳遞session為空。(溫馨提示:不喜歡聽流水賬的可以略過以下兩段,直接看下面的解決措施。)我除錯了一下程式,將登陸跳轉後的頁面print_r($_SESSION),果然為空值。最後查詢資料說是要把 use_trans_sid 的值改為 1,於是在配置檔案中加了一行:'SESSION_OPTIONS' => array('use_trans_sid'=>1),然後再登陸的時候就好了。

第二次,換到另一個環境的時候又出現問題了,於是我又到網上查資料,很可惜,這次找了半天都沒有解決,瞬間感慨國內程式設計這一塊資源匱乏程度還是挺嚴重的啊,所以我只有自己摸索了。首先排除目錄許可權和其他一系列問題後,我意識到這次的問題應該也是php設定的問題。於是我把本地的phpinfo和出問題那臺虛擬空間的phpinfo輸出來,一行一行比較session那塊選項。最後我發現有一行配置不一樣,如下圖:

phpinfo

這裡的session.use_only_cookies的值是on,也就是1,而我本地的是off。我馬上意識到是這裡的問題了,於是又在配置檔案中加了一個引數 'SESSION_OPTIONS' => array('use_trans_sid'=>1,'use_only_cookies'=>0),同時還要在thinkphp/Common/functions.php的550行左右加上一句if(isset($name['use_only_cookies']))  ini_set('session.use_only_cookies', $name['use_only_cookies']?1:0); 因為thinkphp預設沒有定義這個選項。瞬間,又能登陸了。

session.use_only_cookies

經過這兩次的問題,最後,代瀟瑞部落格總結出一下幾點導致不能正常登陸、session傳值為空的原因:

1. 首先檢查存放session的目錄是否可寫。

2. 如果您用的是空間的話,有些空間檔案數目上線也有限制,比如一個200MB的空間,空間單個檔案數不能超過45000,當檔案滿後,就不能在寫入檔案了,如果你session路徑設定在web目錄下,也就會影響session無法寫入了。

3. 就是將“use_trans_sid”的值設為1,可以在配置檔案中加入“SESSION_OPTIONS' => array('use_trans_sid'=>1)”這行程式碼,讓session可以跨頁傳值。

4. 這個是最不容易發現的,我找了好半天,網上也沒有提到這個。也是session的設定選項問題,在第3點的基礎上加一個“'use_only_cookies'=>0”選項,即:“SESSION_OPTIONS' => array('use_only_cookies'=>0,'use_trans_sid'=>1)”,同時還要在thinkphp/Common/functions.php的550行左右加上一句if(isset($name['use_only_cookies']))  ini_set('session.use_only_cookies', $name['use_only_cookies']?1:0); 因為thinkphp預設沒有定義這個選項。

不能正常登陸、session傳值為空的問題大概就是這幾個因素了,如果還有其他原因,我會再次的補充完善。如果您有什麼不清楚的,也歡迎與代瀟瑞部落格交流。