2012-04-23 50 views
7

最近我做了三個蛋糕應用程序和所有三個共享此問題。配置主要是股票,我用它作爲會話選項。CakePHP不斷記錄我

Configure::write('Session', array(
    'defaults' => 'php', 
    'cookie' => 'test' 
)); 

經過大量谷歌搜索大家只是表明安全級別太高,但我從來沒有改變過這個值,它是:

Configure::write('Security.level', 'medium'); 

編輯:我也試圖與低安全並沒有改變。

我只使用基本身份驗證檢查,如果用戶登錄或沒有。

在cookie登錄後,系統設置三小時後到期,到期日期之類不更新,直到我再次登錄,這正常嗎?

我似乎無法在所有複製的問題,有時我會登錄並在第二天點擊將再次登錄我出去和其他時候,它會持續一段時間。

我使用Windows 7的瀏覽器並沒有AJAX網站上。

任何想法?謝謝。

+0

它與MEE發生過......嘗試改變'配置::寫( 'Security.level', '低');'! – Rikesh 2012-04-23 10:48:02

+0

沒有必要飛離手柄,現在開始起訴瀏覽器;) – jeremyharris 2012-04-25 15:40:24

+0

@Jleagle你在哪裏設置了登錄用戶的Cookie時間,以及如何?發佈代碼,請.. – thecodeparadox 2012-04-25 17:19:22

回答

5

您使用的是Ajax嗎?問題只發生在IE?

IE使用不同的瀏覽器代理字符串Ajax調用瀏覽器本身。爲了提高安全性,Cake檢查瀏覽器代理,並且在IE的情況下,認爲另一個瀏覽器試圖劫持會話,因爲代理不同。

您可以禁用此檢查:

Configure::write('Session.checkAgent', false); 
+0

我根本不使用AJAX。我試過的唯一瀏覽器是Chrome。 – 472084 2012-04-23 11:16:21

+0

優秀!!!用jQuery修復了我的Ajax問題 – Ondrej 2013-11-15 12:46:57

0

你是不是有與Chrome瀏覽器CakePHP的會話問題的唯一一個。

Pixelastic老鄉編碼暗示following fix,報價:

只需創建一個名爲session_custom.phpapp/config/文件中,拖放以下行:

// Killing this config that was causing so much trouble with Chrome 
ini_set('session.referer_check', ''); 

// No session id in url 
ini_set('session.use_trans_sid', 0); 

// Using custom cookie name instead of PHPSESSID 
ini_set('session.name', Configure::read('Session.cookie')); 

// Cookie like time, depending on security level 
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 

// Cookie path 
ini_set('session.cookie_path', $this->path); 

然後在您core.php文件中設置Configure::write('Session.save', 'session_custom');

+0

這看起來很有幫助,但我認爲它大約是1.3,而不是2.1。這行'ini_set('session.name',Configure :: read('Session.cookie'));'我認爲已經添加到2.1 - 我將進一步調查 – 472084 2012-04-26 10:42:36

+0

我剛剛嘗試'ini_set('session.referer_check '''');'line',然後你的完整代碼就不會停止它的發生。儘管我確實相信它僅適用於Chrome的問題。 – 472084 2012-04-26 11:04:00

0

問題是與會話:

首先檢查UR '的phpinfo();'

檢查會話是否基於文件。

如果是,請通過該過程。

創建只包含這個代碼的新的腳本文件(PHP):<?php var_dump(session_save_path());?>

運行它,如果你得到null或空字符串,然後去這個過程:

  1. 首先在創建一個目錄根文件夾名稱'xyz'或任何你想要的。
  2. 使其可寫,即chmod 777
  3. 轉到您開始會話的腳本,並在開始會話之前將session_save_path更改爲新創建的目錄。即:session_save_path('pathToxyz');

然後你完成了。

如果將會話設置爲內存:不需要配置。他們只是使用系統內存。在這種情況下,你永遠不會遇到這個問題。

+0

phpinfo的哪部分告訴我我需要知道什麼? - var_dump(session_save_path());'給我'string(20)「/ var/lib/php/session」' – 472084 2012-05-01 11:07:37

+0

確定你的會話設置正確。所以這不是你的解決方案嘗試在每一步中''var_dump'登錄數據,以便你可以得到程序中正在發生的事情。也許這會幫助你:) – 2012-05-01 11:13:32

+0

感謝您的幫助! – 472084 2012-05-01 11:38:35

1

運行到相同的問題後,我發現這是由Session.cookieTimeout值引起的。雖然php會話仍然有效,但會話cookie上的截止日期不會被刷新。

這是我現在的會話配置

Configure::write('Session', array(
     'defaults' => 'php', 
     'timeout' => 30, // The session will timeout after 30 minutes of inactivity 
     'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts 
     'checkAgent' => false, 
     'autoRegenerate' => true, // causes the session expiration time to reset on each page load 
    ));