2010-04-28 37 views
6

我有一個會話創建,當從Safari上的ajax調用時調用它爲null。當在Safari瀏覽器的其他頁面中調用PHP會話時爲空

header.php 
session_start(); 
$_SESSION['test'] = 'this is my session'; 


mypage.php 
session_start(); 
echo $_SESSION['test']; <-- NOT WORKING ON SAFARI 

感謝

+0

您是否檢查過啓用了cookies? :) – 2010-04-28 23:40:51

回答

4

它可以在其他瀏覽器中使用嗎? 在沒有AJAX的Safari中工作嗎? 這個腳本是從原始頁面的同一個域加載的嗎?

Safari顯然有更多conservative cookie policy than other browsers。如果PHP端的所有內容都能正常工作,並且其他瀏覽器可以正常工作,那麼我認爲Safari不會將會話cookie發送回服務器。

+0

這通常是Safari的情況。如果您使用的是內聯框架,它會有一個非常受限制的第三方Cookie政策,通常會與會話互動。我願意打賭OP所做的Ajax調用可能會轉到一個子域或不同的域,或者涉及到某種iframe。 – zombat 2010-04-29 00:20:30

+0

我聽說Safari 4比較好,但我還沒有測試過。 – zombat 2010-04-29 00:21:36

0

null還是""

當你if(isset($_SESSION['test']))它是否返回true?

這是唯一的野生動物園?如果是的話,那麼你的瀏覽器設置

您的會話cookie是否保存成功,您可以在header.php頁面的其餘部分閱讀$ _session ['test']?

您是否在頁面的最開始處調用session_start()?

你有什麼錯誤嗎?如果沒有 - 你有沒有讓他們打開?

1

在兩個文件中的session_start()之後加上這一行,並告訴我會話ID是否相同(即表示您在同一會話中)。

echo session_id(); 
3

我面臨同樣的問題,session_id()不斷更改每次刷新,所以safari沒有將會話ID存儲在cookie中。通過手動添加:

setcookie('PHPSESSID', session_id(), 0, '/');

我得到它的工作。

+0

實際上有一個更精確的函數,它可以設置會話cookie參數 - [session_set_cookie_params](http://php.net/manual/en/function.session-set-cookie-params.php) – SteveB 2014-11-20 11:21:25

相關問題