2009-11-17 77 views
0

它引起了我的注意,我的網站在許多版本的Internet Explorer下工作不正常。經過四處瀏覽後,我做了一個「cookie」測試(http://www.rgagnon.com/jsdetails/js-0092.html),並發現當我使用任何版本的IE瀏覽器時cookie不工作,但可與Chrome,Firefox,Safari一起正常工作......php session id和ajax,javascript

看來,當cookies不起作用時,我的會話變量不斷消失。我使用php會話。 PHP不應該自動處理這個問題嗎?

我確實使用了一些javascript的window.location和一些ajax調用(phplivex)。是因爲這個原因嗎?無論如何,它不會在所有網址的末尾追加phpsessionid嗎?

+0

你在每個頁面上使用session_start()嗎? – davethegr8 2009-11-17 00:45:24

+0

是的,我想現在,這是因爲PHP不會將會話ID添加到JavaScript代碼,如window.location – 2009-11-17 00:50:29

+0

@nute:PHP會話管理基於cookie,所以如果IE不記得餅乾以某種方式,這是正常的你鬆動你的會話 – RageZ 2009-11-17 01:11:28

回答

1

難道是時區問題?見Session cookies rejected by Internet Explorer

最終解決

的時區問題,並給我一個提示 檢查時間我的客戶端和服務器 上。我的客戶端是Windows筆記本電腦 ,它具有正確的時間和 時區,這歸功於與NTP協議同步 。另一方面,我的服務器 不同步。

該時區正確,但UTC 時間被設置爲我的當地時間。 因此,服務器實際上是 過去6小時,就客戶而言,是 。對於在我的 客戶端上運行的IE實例,過去一個 小時的超時將在過去 過期。難怪IE會拒絕我的 會話。

我運行ntpdate來修復我的時間,然後 使用tzselect重置我的時區。

# ntpdate pool.ntp.org 
# tzselect 

然後我刷新IE,立即 開始接受會話。我的應用程序的所有 方面開始 正常工作。所以 很少。

道德故事,使用NTP確保 您的機器的時間設定爲 正確。

所以基本上確保UTC時間爲您的服務器上並明確設置PHP時區良好的措施正確(如果你不這樣做,反正你會得到E_STRICT下一個警告)。

+0

不可以。我剛剛設置IE瀏覽器「接受所有的cookies」,它現在可以工作。所以我現在確信我的應用程序無法處理禁用cookie的訪問。 – 2009-11-17 00:49:41

0

nute你確定這不是你的特定IE安裝。你嘗試過不同的機器嗎?

作爲一個整體解決方案,您可以使用use_trans_sid,它會使session id通過URL而不是cookie。 警告use_trans_sid可能會造成嚴重的安全問題,因此我認爲您最好調查問題來自哪裏,如果您確實沒有找到任何解決方案,請使用此方法。

+0

是的,現在經過很多測試,我確信它只是簡單地啓用或不啓用cookie。那麼您會建議我告訴我的用戶,如果他們想要使用我們的網站,他們需要接受Cookie,而不是在網址中插入會話ID? – 2009-11-17 01:41:29

+0

是的,我會推薦更多的用戶警告,然後'use_trans_sid','use_trans_sid'是一種黑客構建手機網站。另外,因爲'J2EE','ASP.NET','PHP'(以及我忘記的)中的所有會話處理都是基於cookie的,所以我認爲不接受cookie的用戶不僅會遇到問題,還會遇到問題任何網站! – RageZ 2009-11-17 02:12:26