2016-08-06 4 views
2

これは、正確にsession_regenerate_id()を呼び出すときの非常に具体的な質問です。セキュアな値をセッションに設定する前または後にsession_regenerate_id()を呼び出す間に違いまたはセキュリティ上のリスクはありますか。彼らが効果的に同じですセキュアな値を設定する前または後でセッションIDを再生成

if ($login_success) { 

    $_SESSION['login_status'] = 'logged_in'; 
    session_regenerate_id(true); 

} 

答えて

2

これはどのように動作するのですか?session_regenerate_id()は、セッションIDを作成して変更し、セッションを新しいファイルに転送し、Cookieを送信します。引き数としてtrueを引き渡すと、古いセッションファイルも削除されますが、引き数は省略されます。

だから、あなたが使用するかどうか

session_regenerate_id(true); 
$_SESSION['login_status'] = 'logged_in'; 

または

$_SESSION['login_status'] = 'logged_in'; 
session_regenerate_id(true); 

それは同じである:情報は新しいファイルに書き換えられ、クッキーが送信されます。私は古いセッションハイジャックを避けるために、いつでも引数としてtrueを使用することをお勧めします。

+0

あなたの答えは完全に正しいです。私は入力には感謝していますが、実際の問題にはつながらなかった。他のプログラマーの混乱を避けるために、私は答えを変えました。いいえ、私はあなたの答えをupvoted意図された馬鹿。 – Nitin

1

;:

if ($login_success) { 

    session_regenerate_id(true); 
    $_SESSION['login_status'] = 'logged_in'; 

} 

またはセッションで値を設定した後:値を設定する前に

セッション情報は実際にはsession_write_close()を呼び出すとき(またはスクリプトが終了したときに暗黙的に)永続化されます。したがって、古いIDのデータは永続化されませんでした。

+0

session_regenerate_id()が暗黙的にsession_write_close()とsession_start()を呼び出すか、変更を直接永続化するために再生成、値の変更、セッションのクローズとセッションを開始する必要があるかどうか確認してください。 – Nitin

+1

@Nitin、これはPHPです。トランザクションはすぐに終了し、ヘッダー(クッキー)をクライアントに送信します。ですから、再生成後にセッションを閉じて再起動する必要はありません。 –

関連する問題