我有標準的身份驗證情況...訪問者填寫登錄名+密碼來形成,php腳本在數據庫中對其進行身份驗證,重定向回某個頁面。session_regenerate_id()在IE11/Edge中不起作用
在這個過程中,當客戶在重定向之前成功通過身份驗證時,我們只添加session_regenerate_id(true)。在Chrome中一切正常,但它不適用於某些版本(並非全部)的IE11和最新版本的Edge(在虛擬框中試用 - 從modern.ie下載)。也許它在其他一些瀏覽器中不起作用。
它是如何在Chrome瀏覽器:與登錄表單
- 客戶端負載頁面 - 他的會話ID AAA
- 客戶端發送的形式 - 要求具有會話ID AAA
- 客戶端進行認證 - session_regenerate_id(真)叫
- 響應具有設置cookie和session ID BBB(+地點:YYY)
- 瀏覽器發出的請求與會話ID YYY BBB
- 響應沒有設置cookie的,所以會話ID爲BBB
- 端進行身份驗證
它是如何在IE11 /邊工作:
- 客戶端負載頁面,登錄表單 - 他有會話ID AAA
- 客戶端發送的形式 - 要求具有會話ID AAA
- 客戶端進行認證 - session_regenerate_id(TRUE)稱爲
- 響應具有設置cookie和session ID BBB(+地點:YYY)
- 瀏覽器發出的請求與會話ID YYY AAA
- 響應沒有設置cookie的,所以會話ID是AAA
- 客戶端不認證
問題是,該會話使用AAA再生會話ID的時候除去,所以客戶端無法進行身份驗證。
當沒有位置標題時它甚至不起作用,只是顯示帶有到其他頁面的鏈接的靜態頁面。
它看起來像瀏覽器忽略了Set-cookie。
當我刪除session_regenerate_id(),它「工作」,芽不安全。
它究竟如何安全*? –
@FranzGleichmann - [會話修復](https://en.wikipedia.org/wiki/Session_fixation) – kluvi
沒關係,在那裏學到了新的東西。謝謝 –