首頁 > 後端開發 > php教程 > 詳解PHP會話如何實現在30分鐘後被銷毀(附程式碼實例)

詳解PHP會話如何實現在30分鐘後被銷毀(附程式碼實例)

藏色散人
發布: 2023-04-11 08:40:01
轉載
2103 人瀏覽過

本文要為大家介紹PHP會話如何指定時間銷毀的問題,以下就給大家詳細介紹如何透過session_destroy()這個函數來銷毀會話的,希望對需要的朋友有所幫助~

詳解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();
登入後複製

註: 使用session_start()在PHP會話銷毀後重新啟動會話。 使用PHP$_SESSION取消設定特定的會話變數。對於較舊的PHP版本,請使用session_unset()。 php會話銷毀輸出【推薦學習:PHP影片教學

關於此登入session_destory()範例

讓我們建立一個登入範例程式碼,以使用PHP會話、 session_destroy等。它允許用戶從當前會話登入和登出。如果您在PHP腳本中尋找完整的使用者註冊和登錄,請使用此程式碼。 此範例提供了自動登入會話到期功能。

帶有登入表單的登入頁面

此表單發佈使用者輸入的使用者名稱和密碼。它驗證PHP中的登入憑證。 成功登入後,它將登入狀態儲存到PHP會話。它將過期時間設定為從上次登入時間起30分鐘。 它將上次登入時間和到期時間儲存到PHP會話。這兩個會話變數用於使會話自動過期。

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中文網其他相關文章!

相關標籤:
來源:juejin.im
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板