2016-10-21 75 views
3

我有標準的身份驗證情況...訪問者填寫登錄名+密碼來形成,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(),它「工作」,芽不安全。

+0

它究竟如何安全*? –

+0

@FranzGleichmann - [會話修復](https://en.wikipedia.org/wiki/Session_fixation) – kluvi

+0

沒關係,在那裏學到了新的東西。謝謝 –

回答

1

我自己回答我的問題... 問題是,Set-Cookie頭不包含域。

例子:www.site.com

鉻:工程確定,從目前的URL中獲取域(www.site.com) 邊緣:不知道怎麼回事,但新的會話ID保存到域站點。com

解決方案:使用session_set_cookie_params()將域設置爲「.site.com」(所有子域)。

相關問題