2016-10-21 5 views
3

私は標準的な認証状況を持っています...ビジターはlogin + passwordをフォームに入力し、PHPスクリプトはそれをデータベースで認証します。IE11/Edgeでsession_regenerate_id()が機能しません

このプロセスでは、リダイレクトの直前に顧客が正常に認証されたときにsession_regenerate_id(true)を追加します。 Chromeではすべてうまく動作しますが、一部のバージョン(すべてではない)ではIE11と最新バージョンのEdge(仮想ボックスで試しました - modern.ieからダウンロード)では動作しません。他のブラウザではうまくいかないかもしれません。

それがChromeで動作しない方法:ログインフォームで

  • クライアントの負荷のページを - 彼はセッションID AAAを持つ
  • クライアントがフォームを送信 - 要求が
  • クライアントが認証されているセッションID AAAを持っています - (真)session_regenerate_idと呼ばれる
  • 応答のSet-CookieやセッションID BBB(+所在地:YYY)は
  • ブラウザはBBB
  • セッションIDとYYYを要求すると
  • 応答は、クッキーを設定し、そのセッションIDがBBB
  • ある
  • ていないクライアントは、それがIE11 /エッジで動作するどのよう

を認証されている:ログインフォームで

  • クライアントの負荷のページを -
  • と呼ばれる(真)session_regenerate_id - 要求は、セッションID
  • クライアントが認証されているAAAを持っている - 彼は
  • クライアントがフォームを送信セッションID AAAを持っています210
  • 応答は、セッションIDをBBB(+所在地:YYY)クッキーに設定した
  • をブラウザがAAA
  • 応答は、クッキーを設定していないので、セッションIDがAAAでセッションIDをYYYに要求を行います
  • クライアントが問題はセッションIDを再生成する場合、クライアントは認証できないので、セッションのAAAが、削除されていること、である

を認証されていません。

ロケーションヘッダーがなく、他のページへのリンク付きの静的ページを表示するだけでは機能しません。

ブラウザがSet-cookieを無視しているように見えます。

私がsession_regenerate_id()を削除すると、それは「うまくいく」と思えます。

+0

どのようにそれが*安心*ですか? –

+0

@FranzGleichmann - [セッションの固定](https://en.wikipedia.org/wiki/Session_fixation) – kluvi

+0

大丈夫、何か新しいことを学んだ。ありがとうございました –

答えて

1

私は自分の質問に答えます... 問題は、そのセットのクッキーヘッダーにドメインが含まれていないことです。

例:www.site.com

クローム:OK動作しますが、現在のURL(www.site.com) エッジからドメインを取得することは:どのように知っているが、新しいセッションIDは、ドメインのサイトに保存していません。com

解決策:domainを ".site.com"(すべてのサブドメイン)に設定するには、session_set_cookie_params()を使用します。

関連する問題