【问题标题】:PHP simple session-timeoutPHP 简单会话超时
【发布时间】:2017-02-02 23:34:00
【问题描述】:

我有一个大学项目,我们应该在其中开发一个带有免费会话的静态网站。 我需要一个简单的 php 超时代码。 使用这个正确吗?代码:

<?php
if ($_SESSION['timeout'] + $minutes * 60 < time()) {
   // session timed out
} else {
 // session ok
}
?>

$_SESSION['timeout'] 设置为 time();

【问题讨论】:

    标签: php session session-variables session-timeout


    【解决方案1】:

    这取决于您的网站逻辑。如果需要,请尝试使用它。

    <?php
    session_start(); $t=time(); $diff=0; $new=false;
    if (isset($_SESSION['time'])){
    $t0=$_SESSION['time']; $diff=($t-$t0); // inactivity period
    } else {
    $new=true;
    }
    if ($new || ($diff > 10)) { // new or with inactivity period too long
    //session_unset(); // Deprecated
    $_SESSION=array();
    // If it's desired to kill the session, also delete the session cookie.
    // Note: This will destroy the session, and not just the session data!
    if (ini_get("session.use_cookies")) { // PHP using cookies to handle session
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 3600*24, $params["path"],
    $params["domain"], $params["secure"], $params["httponly"]);
    }
    session_destroy(); // destroy session
    // redirect client to login page
    header('HTTP/1.1 307 temporary redirect');
    header('Location: login.php?msg=SessionTimeOut');
    exit; // IMPORTANT to avoid further output from the script
    } else {
    $_SESSION['time']=time(); /* update time */
    echo '<html><body>Tempo ultimo accesso aggiornato: ' .$_SESSION['time'].'</body></html>';
    }
    ?>
    

    但我建议使用session_regenerate_id() 而不是session_destroy()

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 2011-10-17
      • 2010-12-11
      • 2013-05-29
      • 1970-01-01
      • 2019-06-28
      相关资源
      最近更新 更多