2011-02-08 35 views
2

場景:我在我的網站http://domain.com/上,看到我需要的一些內容。我點擊「管理此頁面」鏈接打開一個新標籤,該標籤會將我發送至https://domain.com/myadmin/,然後我重新進行身份驗證,導航到我的網站相應的審覈面板,完成我的工作,並且通常會將該標籤打開。PHP會話在SSL /非SSL頁面之間被擦除,即使在單獨的標籤中

現在回到網站的非SSL版本上,我點擊其他頁面等,查看其他內容以適度調整,以及是否回到我的舊版https://domain.com/myadmin/標籤,或打開另一個新的https://domain.com/myadmin/標籤,突然我的舊會話消失了,我必須重新進行身份驗證。

目前,我們的會話數據存儲在Memcache中。我們的SSL啓用節點是一臺機器。我們的非SSL站點在十多個節點上進行負載平衡。所有節點通過NFS共享一個通用代碼庫,因此所有節點上的代碼都是相同的,無論安全與否。

在做了很多潛伏和閱讀之後,我想知道它是否與php.ini的session.cookie_secure設置有關......但是由於我們強制每個人使用secured/myadmin/panel重新進行身份驗證,似乎安全會話正在消失。

我認爲問題是本地的應答SSL請求的節點。如果我們打開https://domain.com/myadmin/的選項卡並登錄,然後刪除/ myadmin /路徑,並瀏覽整個網站https://domain.com/,看起來我們的會話永遠不會消失。但是,只要我們點擊瀏覽器中的一個鏈接,強制我們訪問該網站的非安全版本,我們的安全會話就會變得很糟糕。

+0

爲了澄清,我們不打算在安全和非安全會話之間共享數據。我們可以以一個用戶的身份登錄到domain.com,然後以完全不同的用戶身份登錄到/ myadmin/secured面板。但是,只要我們在非安全網站上進行了任何操作,/ myadmin /上的安全會話就會受到影響。 – iandouglas 2011-02-08 23:38:00

+0

Followup:我登錄到非SSL站點,並看到一個帶有PHPSESSID值的cookie,假設它是abc123。我打開一個新標籤,轉到https://domain.com/myadmin/並登錄,然後使用*相同的* PHPSESSID值創建第二個cookie。在非SSL網站上做任何其他事情都必須清除我們設置的標誌以表明我們已經登錄到管理面板中...我找不到任何其他原因。 – iandouglas 2011-02-09 00:14:10

回答

2
  1. 更改會話密鑰名 之一(即PHPSESSID _SECUREPHPSESSIDS爲你的安全 連接),這樣你就不會覆蓋 在用戶的瀏覽器cookie的。
  2. 請在您的 餅乾上檢查您的路徑設置,以確保它們覆蓋您希望網站的 部分。
  3. 如果您不希望安全會話ID 是對非安全連接 您可以設置安全標誌 上的cookie,因此僅是 轉移到同一個域可見。
1

這是發生了什麼事。

  1. 當不可見的cookie的用戶訪問HTTP網站,非安全PHPSESSID的cookie被設置
  2. 當用戶訪問管理工具,安全PHPSESSID cookie被創建
  3. 當一個安全的cookie存在在相同的名稱被設置非安全的cookie,安全的cookie被替換的非安全cookie

的解決方案,Yzmir說,是改變會話密鑰名稱是不同的