22

IPアドレスをロックします。

これは、ユーザーが同じ IP アドレスでしかログインできないということですか? または、ユーザーはログアウトし、新しいセッションを取得するために再ログインする必要がありますか?

if (isset($_SESSION['last_ip']) === false) {
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
}

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();  
}
4

3 に答える 3

13

このコードは、ユーザーの IP アドレスが変更された場合にセッションを削除 (ログアウト) します。

したがって、ユーザーは任意の IP アドレスからログインできますが、IP アドレスが変更されるとログアウトされます。

これはセッションのハイジャックを防ぐために機能する可能性がありますが、動的 IP を使用している場合は IP が変化し続けるため、うまく機能しません。

于 2013-04-09T10:04:45.943 に答える
1
if (isset($_SESSION['last_ip']) === false) {
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
}

上記のコードは、セッション「last_ip」がまだ作成されていない場合、作成され、ユーザーの現在の IP の値を保存することを意味します。

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();  
}

上記のコードは、「last_ip」のセッション値が現在の IP と等しくない場合、すべてのセッション変数を解放し (session_unset)、セッションに登録されているすべてのデータを破棄する (session_destroy) ことを示しています。

実際のシナリオを説明しましょう。

たとえば、私はあなたのウェブサイトにアクセスするので、コードの最初のブロックは私の現在の IP を保存します。これでインターネットが切断され、dhcp が有効になっている isp に再接続し、新しい IP が与えられました。そのため、再度 Web サイトにアクセスすると、コードの 2 番目のブロックが別の IP を持っていることを確認し、ログアウトします。

また、セッション「last_ip」がまだ作成されていない場合に php 通知がスローされないように、コードの 2 番目のブロックをこれに編集します。

if (isset($_SESSION['last_ip']) && $_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();  
}
于 2016-01-27T06:28:55.263 に答える