ホームページ  >  記事  >  バックエンド開発  >  PHP ブラウザが閉じる前にログイン インターフェイスに残った場合はどうすればよいですか?

PHP ブラウザが閉じる前にログイン インターフェイスに残った場合はどうすればよいですか?

PHPz
PHPzオリジナル
2023-03-29 11:33:52752ブラウズ

インターネットの急速な発展と普及に伴い、より便利、効率的、豊富な機能やサービスをユーザーに提供する Web サイトやアプリケーションがますます増えています。これらのインターネットアプリケーションでは、ユーザーログイン機能が標準機能の一つとなっています。ログイン機能を利用することで、ユーザーは自分の個人情報に簡単にアクセスしたり、自分のプロフィールをカスタマイズしたり、パーソナライズされたレコメンドサービスなどを楽しむことができます。しかし、実際に使ってみると、一度ブラウザを閉じてしまうと、次回アクセスする際には再度ログインする必要があり、ユーザーの不便さや煩わしさが増大することは間違いありません。このため、PHP ではブラウザを閉じる前にユーザーがログインしたままにできるソリューションを提供していますので、以下に紹介しましょう。

一般的なログインシステムでは、ユーザーがログインすると、ユーザーのログイン情報(ユーザー名、パスワード、ログイン時刻など)は通常、サーバー上のSESSIONまたはCOOKIEに保存されます。ユーザーが閲覧を続けるか終了すると、ユーザー ID が検証され、SESSION または COOKIE の値に基づいて処理されます。ただし、ユーザーがブラウザを閉じると、SESSION または COOKIE も無効になります。そのため、次回アクセスするときに再度ログインする必要があり、非常に不便です。

この目的を達成するには、PHP が提供するソリューションを使用できます。これは、ユーザーのログイン情報をデータベースに保存することです。ユーザーがログインすると、ユーザーのログイン情報がデータベースのテーブルに挿入され、ユーザーがログアウトすると、レコードがテーブルから削除されます。これにより、ユーザーがブラウザを閉じてもログイン情報は削除されず、次回訪問時にデータベースから情報を取得し、状況に応じたユーザー認証や処理を行うことができます。

特定の実装では、最初にユーザーのログイン情報を保存するデータベース テーブルを作成する必要があります。テーブルには次のフィールドを含めることができます:

  • id: 自動インクリメント主キー
  • username: ユーザー名
  • password: パスワード
  • login_time:ログイン時刻
  • logout_time: 終了時刻または最終アクセス時刻

ユーザーがログインすると、ユーザーのログイン情報がテーブルに挿入されます:

//连接数据库
$conn = mysqli_connect("localhost", "user", "password", "demo");

//获取用户输入的用户名和密码
$username = $_POST["username"];
$password = $_POST["password"];

//查询该用户是否已经登录过
$sql = "SELECT id FROM login_info WHERE username='$username'";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    //该用户已经登录过了,更新登录时间即可
    $login_time = time();
    $sql = "UPDATE login_info SET login_time='$login_time' WHERE username='$username'";
    mysqli_query($conn, $sql);
} else {
    //该用户是首次登录,将登录信息插入到数据库中
    $login_time = time();
    $sql = "INSERT INTO login_info (username,password,login_time) VALUES ('$username','$password','$login_time')";
    mysqli_query($conn, $sql);
}

When Whenユーザーがログアウトすると、ユーザーのログイン情報をデータベースから削除します:

//获取用户的用户名
$username = $_SESSION["username"];

//将该用户的登录信息从数据库中删除
$sql = "DELETE FROM login_info WHERE username='$username'";
mysqli_query($conn, $sql);

ユーザーが再度 Web サイトにアクセスすると、認証のためにデータベースからユーザーのログイン情報を取り出すことができます:

//连接数据库
$conn = mysqli_connect("localhost", "user", "password", "demo");

//从数据库中取出用户的登录信息
$username = $_SESSION["username"];
$sql = "SELECT * FROM login_info WHERE username='$username'";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    //该用户已经登录过,验证用户身份
    $row = mysqli_fetch_assoc($result);
    if ($_SESSION["password"] == $row["password"]) {
        //用户身份验证通过,更新上次访问时间即可
        $logout_time = time();
        $sql = "UPDATE login_info SET logout_time='$logout_time' WHERE username='$username'";
        mysqli_query($conn, $sql);
    } else {
        //用户身份验证失败,跳转到登录页面
        header("Location:login.php");
    }
} else {
    //该用户未登录过,跳转到登录页面
    header("Location:login.php");
}

これにより、ユーザーがブラウザウィンドウを閉じてもログイン情報がデータベースに保存され、次回訪問時に再ログインすることなくログイン状態を保持することができます。もちろん、この機能をより安全かつ確実に実装するには、自動ログアウト時間の設定、SQL インジェクションの防止など、このソリューションにいくつかの最適化を行う必要があります。

つまり、ユーザーのログイン情報をデータベースに保存することで、ユーザーはブラウザを閉じる前にログインしたままにすることができ、ユーザー エクスペリエンスと効率が大幅に向上します。開発者は学習して習得する価値があります。テクノロジー。

以上がPHP ブラウザが閉じる前にログイン インターフェイスに残った場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。