ログインに成功したら、トークンを作成し、mysql に記録します。作成されたトークンはさらにセッションで渡されます。
最初に、パスワードで保護されたページで、セッション トークンが mysql のトークンと同じかどうかを確認します。
他のパスワードで保護されたページには、最初のページ (たとえば、メニューと呼ばれる) からのみアクセスできます。
最初のパスワードで保護されたページで、page_token と呼ばれる追加のトークンを作成します (mysql にも記録しますか?; mysql を使用しないより良い/高速な方法はありますか?; 次のようなものかもしれません:
(isset($_SESSION) == $_SESSION['page_token']))
セッション トークンは同じままで、page_token は各ページのリロード後に変更されます。
他のすべてのページで、セッション トークンと page_token が mysql のトークンと同じかどうかを確認します。
そのような方法は良いでしょうか?より良い方法が存在する可能性があります(いくつかのリンク)?
ありがとうございました
アップデート
オンラインで検索しました。上記の方法は合理的ではないことを理解してください。ログインしたセッションを確認するだけで十分です。
ただし、パスワードで保護された特定のページの訪問者が、正しいユーザー名とパスワードを入力した訪問者と同じであることをできる限り確認したいと考えています。
それでは次の質問
1) このチュートリアルについてどう思いますかhttp://wblinks.com/notes/secure-session-management-tips
2) コードについてどう思いますか? 通常のユーザーは、1 つのセッション中に以下の HTTP を変更できますか?
if( $_SESSION['loggedin'] != 1 or $_SESSION['time_when_form_submitted'] > date("Y-m-d H:i:s")
or
$_SESSION['_USER_LOOSE_IP'] != long2ip(ip2long($_SERVER['REMOTE_ADDR']) & ip2long("255.255.0.0"))
or
$_SESSION['HTTP_USER_AGENT'] != $_SERVER['HTTP_USER_AGENT']
or
$_SESSION['HTTP_ACCEPT_LANGUAGE'] != $_SERVER['HTTP_ACCEPT_LANGUAGE']
or
$_SESSION['HTTP_ACCEPT'] != $_SERVER['HTTP_ACCEPT']
or
$_SESSION['HTTP_ACCEPT_ENCODING'] != $_SERVER['HTTP_ACCEPT_ENCODING']
) {
header('Refresh: 0; URL=http://www.domain.com/login.php');
}