2011-08-23 91 views
1

我希望這個問題還沒有得到解答,我已經查看了一段時間並沒有真正看到答案。Kohana 3.2在每個請求上重新生成會話ID

我正在使用Kohana 3.2會話與數據庫驅動程序。問題是每次頁面加載或刷新時,都會創建一個新的會話ID。

我在我的引導中設置了Session :: $ default ='database'。我的會話配置如下所示:

return array(
    'database' => array(
     /** 
     * Database settings for session storage. 
     * 
     * string group configuation group name 
     * string table session table name 
     * integer gc  number of requests before gc is invoked 
     * columns array custom column names 
     */ 
     'name'  => 'trucero_session', 
     'lifetime' => 1200, 
     'group' => 'default', 
     'table' => 'sessions', 
     'gc'  => 500, 
     'columns' => array(
      /** 
      * session_id: session identifier 
      * last_active: timestamp of the last activity 
      * contents: serialized session data 
      */ 
      'session_id' => 'session_id', 
      'last_active' => 'last_active', 
      'contents' => 'contents' 
     ), 
    ), 
); 

提前致謝。

回答

0

您不能依賴會話ID,因爲它確實在每個請求上都會重新生成。如果您需要某種身份證件,您必須使用自定義身份證件。

+0

謝謝你的回覆...我已經設置並使用自定義會話ID ...我想我的問題應該是這個正常/好嗎?會話數據是準確的,我只是得到一個充滿會話的數據庫表......它似乎也沒有刪除它們......我將gc設置爲1200,只是爲了縮短它的壽命,看看我是否可以看到它是否正在刪除。 –

+0

是的,會話標識重新生成是正常的,但它仍然應該在舊會話過期時刪除。在'modules \ database \ classes \ kohana \ session \ database.php :: _ gc()'中,你會看到刪除代碼。事實上,你可以嘗試短暫的時間來查看是否刪除了代碼。 –

1

我不認爲Laurent真的理解你的問題,因爲在頁面刷新之間應該只創建和使用一個單獨的會話id--這就是會話的全部重點,所以你可以每次重複使用同一個會話當你訪問一個頁面。

當你打開網頁或者使用新的瀏覽器,或(由你的頁面註銷等)關閉現有的瀏覽器,然後打開一個新的,或者銷燬當前會話,然後創建創建一個新的會話ID一個新的(通過登錄)。

但是我在Kohana 3.2中發現了類似的問題,其中我的腳本每次讀取頁面時都會生成多個會話ID,並且由於在每個頁面刷新/訪問時創建了新的session_id,因此會話未被「讀取」回來。我能夠跟蹤這個問題到谷歌Chrome瀏覽器(對我來說),我周圍挖掘後發現了這個帖子:

http://forum.kohanaframework.org/discussion/10303/session-problem-with-ie-and-chrome/p1

這基本上說,你要的Cookie ::域設置爲FALSE或者指定Kohana數據庫會話在Chrome和IE中正常工作的特定域。

+0

我有同樣的確切問題(Kohana 3.1)。如本答案中所述設置Cookie :: domain並未解決問題。 – PeterG