2012-06-16 173 views
1

我想獲得SSL會話ID,所以我知道它是同一個用戶。當我嘗試$_SERVER['ssl_session_id']它什麼都不返回,並且做print_r($_SERVER)$_SERVER['ssl_session_id']不顯示。獲取PHP SSL會話ID

我需要有SSL會話ID的原因是我創建一個登錄系統,並希望確保會話不能通過固定攻擊使用。我將它添加到auth會話cookie中,然後可以稍後檢查它。

編輯: 從我得到的答案和評論: 它改變每一個請求,並不是存儲在$ _SERVER或$ _SESSION超級全局數組中;因此在網絡上使用是無用的,不應該使用。

+0

SSL_SESSION_ID它並不總是由SSL /通過您的網絡服務器的SSL實施設置。 (apache?)[請閱讀此處](http://h10025.www1.hp.com/ewfrf/wc/document?cc=us&lc=en&dlc=en&tmp_geoLoc=true&docname=c02670261)。你會介意在編輯中解釋你爲什麼要使用這個變量嗎?目的是什麼? – Kaii

+0

你是否偶然會在SSL和PHP會話之間產生混淆?[session_id()'](http://php.net/manual/de/function.session-id.php)?使用SSL_SESSION_ID來檢查它是否是同一個用戶在我看來是錯誤的。 – Kaii

+0

這確實是錯的。同一個用戶可能在很短的時間內擁有多個SSL會話ID,而且任何一端的使用頻率都會發生變化,因爲任何一端都會決定將其過期。 – EJP

回答

1

我從評論和研究中瞭解到,您無法通過PHP獲取ssl_session_id,即使您可以更改它也沒有用。感謝那些回答和評論的人。

0

你有沒有嘗試訪問會話之前做

session_start(); 

?如果是,那麼你的會話以某種方式被破壞(cookie沒有設置正確,所以新的會話會不斷啓動),或者你沒有將該值保存到會話中以開始。

$ _SERVER與會話無關。它是一個超全球的,包含有關服務器和PHP配置的信息。 $ _SERVER是它自己的超全球專用服務器,純粹用於服務器數據。

+0

哦,我認爲這不是一個會議 - 謝謝!將嘗試 –

+0

ssl會話ID是不是一個不可更改的值?你能給我一個代碼示例 - 我只是嘗試print_r($ _ SESSION),它只顯示我設置的內容 –

+1

你的意思是「純粹用於服務器數據」。而不是「,純粹用於會話數據。」我猜。 –