0

この人気のある小さなチュートリアル ( http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL ) を実行して、ユーザー ログイン システムを作成しました。最後のポイントは、ユーザーがログインしているかどうかを確認する方法を示しています。ログインしているユーザーをどのように確認して、自分の詳細を取得できるのか疑問に思っていました。どんな助けでも素晴らしいでしょう!

どうもありがとう、

ジョー

4

1 に答える 1

1

チュートリアルのこのコードは、次のことを説明しています。

Cookie はセッション ID を保存するだけなので、PHP はどの $_SESSION 変数をロードするかを認識します。

ユーザーがログインすると、このデータが SESSION var に保存されます。

  $user_id = preg_replace("/[^0-9]+/", "", $user_id); // XSS protection as we might print this value
  $_SESSION['user_id'] = $user_id; 
  $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username); // XSS protection as we might print this value
  $_SESSION['username'] = $username;
  $_SESSION['login_string'] = hash('sha512', $password.$user_browser)

ユーザー ID とユーザー名をセッションに保存します。ユーザーのハッシュ化されたパスワードと現在使用されているブラウザーから作成されたログイン文字列も保存します。

にアクセスするだけで、ページの開始時にすべてのデータをロードできます$_SESSION

したがって、ユーザー名を取得し、$_SESSION['user_id']それを使用してDBからこのユーザーデータを取得します。

これはユーザーを取得する方法ですが、さらに重要なことは、セッションが実際にこのユーザーに属しているかどうかを確認する必要があることです。このチュートリアルの意味では、DB から取得したばかりのユーザーから同じ login_string を生成して、セッションに保存された login_string と一致させる必要があります。

これにより、このセッションが盗まれないようにすることができます。

例えば:

$userid_from_session = $_SESSION['user_id'];

$stmt = $mysqli->prepare("SELECT id, username, password FROM members WHERE id = ? LIMIT 1");
$stmt->bind_param('s', $userid_from_session ); // Bind "$userid_from_session " to parameter.
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
$stmt->bind_result($user_id, $username, $db_password); // get variables from result.
$stmt->fetch();
//check if username from cookie exists
if($stmt->num_rows == 1) {
    //yep, now lets check the rest
    //user must use same browser
    $user_browser = $_SERVER['HTTP_USER_AGENT']
    // compare generated login_string with saved one from session
    if($_SESSION['login_string'] == hash('sha512', $db_password.$user_browser){
        // Awesome,  this is the correct user ($user_id)
    } else {
         // The login string is incorrect, this cookie must be hijacked or something.
    }
} else {
    // User doesn't exists, this session is edited or crap
}
于 2013-09-05T18:22:05.080 に答える