我在我的網站中遇到了困擾我好幾個月的這個問題。我一直在繞過它,但現在我似乎無法找到這樣的方式,所以我想明白爲什麼不解決根本問題?會話變量對於某些用戶而言消失(drupal)
我的根本問題是,有時(並不總是)會話數據對於一些用戶的消失。我知道他們中的大多數肯定會啓用cookies。我想也許這是一個會議屆滿的事情,但我不認爲就是這樣。我設置過期很長時間,加上他們的會話被擦除的用戶量是太該死的高...
我使用Drupal的6
有什麼建議?
我在我的網站中遇到了困擾我好幾個月的這個問題。我一直在繞過它,但現在我似乎無法找到這樣的方式,所以我想明白爲什麼不解決根本問題?會話變量對於某些用戶而言消失(drupal)
我的根本問題是,有時(並不總是)會話數據對於一些用戶的消失。我知道他們中的大多數肯定會啓用cookies。我想也許這是一個會議屆滿的事情,但我不認爲就是這樣。我設置過期很長時間,加上他們的會話被擦除的用戶量是太該死的高...
我使用Drupal的6
有什麼建議?
在腳本的頂部添加ob_start()
和session_start();
。
它是一個Drupal站點。會話變量通常被存儲。但有時他們消失 – 2012-04-03 07:15:05
幾樣東西,你可能要檢查
我猜了一下這裏,有點我認爲這可能是你的問題/解決方案:
簡短的回答:嘗試在網站設置session.cookie_lifetime /默認/ settings.php配置爲0
長答案:會話取決於服務器上的會話數據和客戶端上的PHP會話cookie。如果您將會話Cookie生存期設置得太低(Drupal默認爲23天,所以通常不是問題),則會話可能會在客戶端被「銷燬」(通過瀏覽器刪除cookie,因爲它已過期)。
我曾在同一時間,因爲我改變了Drupal的會話cookie的生命23天的東西比在試圖限制登錄時間出於安全原因,顯得比較「合適」遇到這個問題。但降低會話cookie生存期並非解決方案。這樣做的最好方法是限制服務器端的會話持續時間。你可以通過設置session.gc_maxlifetime(也可以在Drupal設置中)爲7200(2小時)。然後,您只需確保會話垃圾回收運行得足夠頻繁,以便會話在2小時後可靠地結束。
然後,以避免問題的cookie被銷燬的客戶端,您可以session.cookie_lifetime設置爲0。這將確保只要用戶在網站上,只有當他保持不活動的時間超過session.gc_maxlifetime時,他纔會被註銷。最重要的是,當他關閉瀏覽器時,它還會記錄用戶輸出。默認情況下,Drupal沒有做到這一點!
ESSENTIAL UPDATE:爲什麼將cookie生存期設置爲0是一個好主意?因爲否則,服務器將客戶端需要的日期/時間設置爲EXPIRE cookie。 那麼,你可能會說什麼?那麼,考慮一下這種情況:如果客戶端的時鐘設置錯誤(是的,它確實發生了,即使大多數計算機通過NTP更新他們的時間,有些則不會)!它可能會很快過期,然後你認爲即使到達即將到期。 這是確切的問題,我不得不一次調試...
所以儘量cookie生存0至少一次,如果您遇到奇怪的問題,會議:)
我覺得你的問題是與會話保存路徑
其中.PHP放置請創建您的根目錄,即域名(搭配chmod 777 MUST)的文件夾,並把這個代碼
if(!is_writable(session_save_path())){
session_save_path(dirname(__FILE__)."/<xyz>");
}
啓動會話之前。
還有一件事情發生在使用文件而不是內存進行會話設置時。
我真的不明白。我應該如何命名目錄?爲什麼這個工作? – 2012-04-17 20:59:07
聽好了,前一陣子我已經走了這個錯誤,這幫助我消除了這個錯誤。現在如果你將這段代碼放在index.php中,那麼你已經創建了一個文件夾
我曾經有過類似的問題,原因是着名的www。
該網站已啓用通過www.example.com和example.com訪問,這些網站一直運行良好,直到用戶點擊一個鏈接,該鏈接使用oposit域名進行硬編碼。然後,他切換域/子域和Apache/PHP在「新」域上爲用戶創建了一個新會話。當人們從付款中歸還時,這特別令人討厭。
我們的解決方案是始終強制用戶僅使用example.com,並禁用或將所有請求直接重定向到www.example.com直接發送到example.com。通過這種方式,你永遠不會在兩者上都獲得會話
我有重定向到www – 2012-04-17 20:57:03
我聽說過某個特定PHP版本的Drupal session_regenerate_id()問題。你可以嘗試禁用這個功能並測試它嗎?
我該如何禁用它? – 2012-04-17 20:57:20
你可以註釋掉「session_regenerate_id();」在user.module中。如果PHP版本是4.1或4.4,則會報告此問題。你有哪個PHP版本? – 2012-04-18 06:49:50
任何代碼?如果我們有合作的話,這將有所幫助。 – MichaelRushton 2012-04-02 08:14:05
代碼? <?php echo $ _SESSION ['notworking'];?>什麼也沒有顯示 – 2012-04-02 08:29:41
在會話頁面頂部是否有'session_start()'? – MichaelRushton 2012-04-02 08:30:40