2011-01-29 63 views
2

這是一個常見的php問題的變種,似乎違反解決方案(和常識):當用戶在我的網站上的http和https之間切換時,php轉儲會話的內容。這將是很糟糕的,除了在域test.mysite.com下運行它時網站正常運行。這個問題只會在www.mydomain.com下運行,並且只在我們的新服務器上運行。代碼在我的舊機器上工作得很好!Php會話在SSL上重置

這兩臺服務器都運行CentOS,Rackspace CloudServer上存在一個麻煩的問題。

有什麼建議嗎?

編輯

只是爲了瞭解得更透徹些:會話實際上得到去一個安全的頁面時清除。即使會話ID沒有更改,我也無法返回到不安全的頁面查看會話的原始內容。

+0

SSL版本是否實際在同一節點上運行?有可能將它們分開。 – Orbling 2011-01-29 01:03:27

+0

據我所知。 – Jitters 2011-01-30 18:02:43

+0

「會話實際上已被清除」 - 我發現**非常不可能 - 你確定你不會丟失會話ID,或者你真的檢查過序列化的數據文件/記錄。 – symcbean 2011-01-31 14:19:31

回答

1

聽起來像是你犧牲品可怕的php.ini文件的詛咒。一些Cookie參數設置不同。

我會確保開發和生產中的php.ini文件完全相同,您正在運行相同版本的PHP,理想情況下是相同的版本。


編輯:好吧,所以它不一定是在php.ini中的差異。

查看您用於Cookie的域。如果您在未明確設置域的情況下設置cookie,則它僅爲當前域。

如果這是www.example.com,那麼訪問http://example.com/然後被重定向到https://www.example.com/的用戶將丟失它們的COOKIES。

爲什麼?因爲Cookie正在爲確切的域設置,並且不會被瀏覽器發送到不同的主機名。

如果您在多個名稱上運行站點,情況也是如此。請確保您只在上運行該網站,名稱爲。如果用戶到達任何其他名稱,則在設置任何cookie之前,將它們重定向爲永久重定向到一個真實姓名。