2012-04-21 104 views
2

保存會話ID的PHPSESSID變量未保存到客戶端cookie中。 這會導致每次調用session_start()函數時生成新的會話標識。PHPSESSID未保存到cookie

當我使用FireFox,Opera和Chrome時,這是正確的。隨着safari,出於某種原因,這個變量被成功保存到cookie中,一切正常。

編輯:這裏是我的會話設置,通過phpinfo()

session settings via phpinfo

我的網站有一個子域,我想用同一個會話acorss所有子域。

2日編輯: 當我檢查var_dump($_COOKIE);在我的主域名,我得到的會話ID名稱PHPSESSID下,但是當我這樣做,在子域我得到一個空array()

+0

檢查你的php.ini的各種會話/ cookie設置。然後使用http調試器(例如Firefox上的httpfox或firebug的網絡標籤)來查看線路上發生了什麼。您沒有提供任何有用的信息來幫助您。 – 2012-04-21 00:51:52

+0

我不認爲這是一個php.ini問題,因爲它只發生在一些瀏覽器上。你需要什麼信息? – 2012-04-21 00:54:29

+2

不,這將是一個.ini問題,Safari只是一個足夠寬容的接受你的服務器發送的瀏覽器。 – 2012-04-21 00:55:36

回答

3

它看起來像Cookie的域被設置爲localhost。這隻會在你實際運行你的網站時起作用localhost。您需要使用session.cookie_domain來匹配您的域名,可選地在其前面有.(如.example.com)以包含子域名。

+0

你說得對,它在我的主域(localhost)中工作正常,但即使設置了ini_set('session.cookie_domain','.localhost');'im仍然存在與子域(forum.localhost)有關的問題, – 2012-04-22 02:10:03

0

它不用於約阿夫的情況下,但也許用誰得到了類似的問題,其他人:

不要忘記調用session_start()

這聽起來像在session_start()將創建PHPSESSID並將其保存在cookie中,如果它不是從客戶端cookie發送的。

從php.net

當訪問者訪問您的網站,PHP會自動(如果session.auto_start被設爲1)或在您的要求(明確通過在session_start())是否與特定的會話ID已與請求一起發送。如果是這種情況,則重新創建之前保存的環境。

約在session_start一些很好的例子()http://php.net/manual/en/function.session-start.php