ホームページ  >  記事  >  バックエンド開発  >  PHP セッションが 30 分後に破棄される仕組みの詳細な説明 (コード例付き)

PHP セッションが 30 分後に破棄される仕組みの詳細な説明 (コード例付き)

藏色散人
藏色散人転載
2022-11-14 16:34:511997ブラウズ

この記事では、PHP セッションを破棄する時間を指定する方法について説明します。ここでは、session_destroy() 関数を使用してセッションを破棄する方法を詳しく紹介します。 need~

PHP セッションが 30 分後に破棄される仕組みの詳細な説明 (コード例付き)

PHP には、すべてのセッション値をクリアするためのコア関数 session_destroy() があります。これは、true または false のブール値を返すパラメーターのない単純な関数です。

PHP のセッション ID は、デフォルトでは Cookie に保存されます。通常、セッション Cookie ファイルの名前は PHPSESSID です。 session_destroy 関数は、Cookie 内の sessionid をキャンセルしません。

セッションを「完全に」破棄するには、セッション ID の設定も解除する必要があります。

この簡単な例では、session_destroy() を使用してセッションを破棄します。 set_cookie() メソッドを使用して、期限切れの PHP セッション ID を持つセッション全体を強制終了します。

簡単な例

destroy-session.php

<?php
// Always remember to initialize the session,
// even before attempting to destroy it.

// Destroy all the session variables.
$_SESSION = array();

// delete the session cookie also to destroy the session
if (ini_get("session.use_cookies")) {
    $cookieParam = session_get_cookie_params();
    setcookie(session_name(), &#39;&#39;, time() - 42000, $cookieParam["path"], $cookieParam["domain"], $cookieParam["secure"], $cookieParam["httponly"]);
}

// as a last step, destroy the session.
session_destroy();

注: PHP セッションが破棄された後にセッションを再開するには、session_start() を使用します。 特定のセッション変数の設定を解除するには、PHP$_SESSION を使用します。古い PHP バージョンの場合は、session_unset() を使用します。 PHP セッション破棄の出力 [推奨学習: PHP ビデオ チュートリアル ]

このログイン session_destory() の例について

PHP セッション session_destroy を使用するログイン サンプル コードを作成してみましょう等これにより、ユーザーは現在のセッションにログインしたり、現在のセッションからログアウトしたりできるようになります。 PHP スクリプトで完全なユーザー登録とログインを探している場合は、このコードを使用してください。 このサンプルは、ログイン セッションの自動有効期限切れ機能を提供します。

ログイン フォームを含むログイン ページ

このフォームには、ユーザーが入力したユーザー名とパスワードが送信されます。 PHP でログイン資格情報を検証します。 ログインに成功すると、ログイン ステータスが PHP セッションに保存されます。有効期限を最後のログイン時間から 30 分に設定します。 最終ログイン時刻と有効期限時刻が PHP セッションに保存されます。これら 2 つのセッション変数は、セッションを自動的に期限切れにするために使用されます。

login.php

<?php
session_start();
$expirtyMinutes = 1;
?>
<html>
<head>
<title>PHP Session Destroy after 30 Minutes</title>
<link rel=&#39;stylesheet&#39; href=&#39;style.css&#39; type=&#39;text/css&#39; />
<link rel=&#39;stylesheet&#39; href=&#39;form.css&#39; type=&#39;text/css&#39; />
</head>
<body>
    <div class="phppot-container">
        <h1>Login</h1>
        <form name="login-form" method="post">
            <table>
                <tr>
                    <td>Username</td>
                    <td><input type="text" name="username"></td>
                </tr>
                <tr>
                    <td>Password</td>
                    <td><input type="password" name="password"></td>
                </tr>
                <tr>
                    <td><input type="submit" value="Sign in"
                        name="submit"></td>
                </tr>
            </table>
        </form>
<?php
if (isset($_POST[&#39;submit&#39;])) {
    $usernameRef = "admin";
    $passwordRef = "test";
    $username = $_POST[&#39;username&#39;];
    $password = $_POST[&#39;password&#39;];

    // here in this example code focus is session destroy / expiry only
    // refer for registration and login code https://phppot.com/php/user-registration-in-php-with-login-form-with-mysql-and-code-download/
    if ($usernameRef == $username && $passwordRef == $password) {
        $_SESSION[&#39;login-user&#39;] = $username;
        // login time is stored as reference
        $_SESSION[&#39;ref-time&#39;] = time();
        // Storing the logged in time.
        // Expiring session in 30 minutes from the login time.
        // See this is 30 minutes from login time. It is not &#39;last active time&#39;.
        // If you want to expire after last active time, then this time needs
        // to be updated after every use of the system.
        // you can adjust $expirtyMinutes as per your need
        // for testing this code, change it to 1, so that the session
        // will expire in one minute
        // set the expiry time and
        $_SESSION[&#39;expiry-time&#39;] = time() + ($expirtyMinutes * 60);
        // redirect to home
        // do not include home page, it should be a redirect
        header(&#39;Location: home.php&#39;);
    } else {
        echo "Wrong username or password. Try again!";
    }
}
?>
</div>
</body>
</html>

ダッシュボードは PHP ログイン セッションを認証し、ログインおよびログアウト リンクを表示します。

これは、ログイン後のリダイレクトのターゲット ページです。ログイン セッションが存在する場合は、ログアウト リンクが表示されます。 タイムアウトになると、セッションの破棄が呼び出されます。すべてのセッションを破棄するphpコード。 30 分の有効期限に達するか、セッションが空の場合は、ユーザーにログインを求めます。

home.php

<?php
session_start();
?>
<html>
<head>
<title>PHP Session Destroy after 30 Minutes</title>
<link rel=&#39;stylesheet&#39; href=&#39;style.css&#39; type=&#39;text/css&#39; />
<link rel=&#39;stylesheet&#39; href=&#39;form.css&#39; type=&#39;text/css&#39; />
</head>
<body>
    <div class="phppot-container">
<?php
if (! isset($_SESSION[&#39;login-user&#39;])) {
    echo "Login again!<br><br>";
    echo "<a href=&#39;login.php&#39;>Login</a>";
} else {
    $currentTime = time();
    if ($currentTime > $_SESSION[&#39;expiry-time&#39;]) {
        require_once __DIR__ . &#39;/destroy-session.php&#39;;
        echo "Session expired!<br><br><a href=&#39;login.php&#39;>Login</a>";
    } else {
        ?>
        <h1>Welcome <?php echo $_SESSION[&#39;login-user&#39;];?>!</h1>
        <a href=&#39;logout.php&#39;>Log out</a>
<?php
    }
}
?>
</div>
</body>
</html>

この PHP コードは、セッションが期限切れになる前にログアウトしたいユーザー向けです。

セッションの破棄を要求することでセッションを破棄します。 phpコード。次に、ユーザーをログイン ページにリダイレクトします。 logout.php

<?php
session_start();
require_once __DIR__ . &#39;/destroy-session.php&#39;;
header(&#39;Location: login.php&#39;);
?>

この例が、PHP セッションを破棄する方法の理解に役立つことを願っています。そして、これはセッションを破棄する必要性を説明するのに最適なシナリオです。

この記事は転載されたものです、元のアドレス: https://juejin.cn/post/7164391542164520990

以上がPHP セッションが 30 分後に破棄される仕組みの詳細な説明 (コード例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。