2015-12-17 241 views
0

所以我有SessionHandler類,那它放入像這樣(cfg_session.php)運動我的其他文件:SESSION_ID行爲古怪

use \Classes\MySessionHandler as Sessao; 

$sessao = new Sessao(); 

// PHP < 5.4 
session_set_save_handler( 
    array($sessao, 'open'), 
    array($sessao, 'close'), 
    array($sessao, 'read'), 
    array($sessao, 'write'), 
    array($sessao, 'destroy'), 
    array($sessao, 'gc') 
); 

register_shutdown_function('session_write_close'); 

session_start(); 

好吧,小不同的是,在我的localweb我使用:

session_set_save_handler($sessao) 

因爲在我的localweb中,實際上PHP> 5.5。

它在我的localweb上運行得非常好,我刷新頁面,註銷,登錄,關閉標籤頁,打開標籤頁,再次登錄,一切正常,我的瀏覽器中的PHPSESSID等於創建的會話文件等。

編輯:我有一個PHP < 5.4的服務器,而我事實上,使用上面的代碼,意味着PHP < 5.4,但它仍然是怪怪的。刷新瀏覽器,它會創建另一個會話文件,但不會更改PHPSESSID。我第一次嘗試登錄時,過程如下所示:它創建會話文件,我將用戶重定向到某個頁面,該頁面在服務器上執行另一個請求,它只創建與PHPSESSID完全不同的另一個會話文件,當然,該應用程序將我註銷。這是奇怪的部分。

但是,然後,我嘗試再次正常登錄,它將我登錄,很好。每個請求都具有相同的ID,session_regenerate_id()工作正常,一切正常,PHPSESSID與創建的會話文件相匹配。

但是,如果我註銷,關閉該選項卡,打開一個新選項卡並嘗試登錄(或關閉選項卡而不註銷),它只是做同樣的事情:記錄我,創建會話文件,但然後,它再次更改de session_id並將我踢出去。

我真的被困在此。不能確定這是否因爲PHP < 5.4或其他。

注: - session_regenerate_id()正在使用在日誌中上檢查如果有會議註銷(然後更新時間和調用regenerateId)和

  • cfg_session.php需要一次每一頁需要使用會話變量上。

我需要一些這方面的信息。我已經看到很多主題,但沒有很多信息或接近解決這種奇怪的行爲。提前致謝。

回答

0

只是說:

ini_set('session.use_cookies', 1); 

的事情是:我沒有使用它在我的localweb,但我讀了默認是1(真),並且可能在我的實時服務器上設置爲0.現在它正常工作。謝謝。

1

SessionHandlerInterface類只適用於5.4.0或更高版本。您的代碼適用於PHP版本5.4.0及更高版本。它肯定會給奇怪的東西

+0

我編輯帖子,看看我是否更清楚,我認爲它錯過了信息。但事情是:我使用的服務器的PHP不到5.4,我使用上面的代碼在PHP中使用少於5.4,好嗎?但它仍然很怪異。 –

+0

該功能不適用於5.4以下的php,如果功能不可用,那麼你如何使用它..... – Vineet1982

0

如何記錄coockie會話時間可能是set_lifetime會議programmaticaly? 也許你需要設置會話cookie的選項

session_set_cookie_params(3600); 

http://php.net/manual/en/function.session-set-cookie-params.php

+0

那麼,你的回答讓我意識到一件事:「ini_set('session.use_cookies',1); 」。我沒有在PHP大於5.4的服務器上使用它,但是這條線解決了我的問題。謝謝你的幫助我潛意識嘿嘿。 –