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