如何在php中设置会话超时?

如何在php中设置会话超时?,php,session,session-cookies,logout,session-timeout,Php,Session,Session Cookies,Logout,Session Timeout,我对PHP语言还是新手,正在尝试如何设置会话超时,这可以确保当用户登录到他们的帐户时,当用户登录时间过长时,在帐户自动注销前的几分钟/1小时内。我参考了这个链接 index.php <?php if(!isset($_SESSION)) { session_start(); } $timeout = $_SERVER['REQUEST_TIME']; /** * for a 1 minute timeout, specified in seconds */ $timeout_

我对PHP语言还是新手,正在尝试如何设置会话超时,这可以确保当用户登录到他们的帐户时,当用户登录时间过长时,在帐户自动注销前的几分钟/1小时内。我参考了这个链接

index.php

<?php
if(!isset($_SESSION))
{ 
  session_start(); 
}

$timeout = $_SERVER['REQUEST_TIME'];
/**
 * for a 1 minute timeout, specified in seconds
*/
$timeout_duration = 60;

if (isset($_SESSION['LAST_ACTIVITY']) && ($timeout - $_SESSION['LAST_ACTIVITY']) > $timeout_duration) {
    session_unset();
    session_destroy();
    session_start();
}

$_SESSION['LAST_ACTIVITY'] = $timeout;
?>
<?php 
// error_reporting(E_ALL); ini_set("display_errors", 1);
session_start();
$timeout = 60; // Number of seconds until it times out.

// Check if the timeout field exists.
if(isset($_SESSION['timeout'])) {
    $duration = time() - (int)$_SESSION['timeout'];
    if($duration > $timeout) {
        // Destroy the session and restart it.
        session_destroy();
    }
}

// Update the timeout field with the current time.
$_SESSION['timeout'] = time();
// include ('sessionTimeout.php');

if( !isset($_SESSION["loginSuccess"]) ){
    echo "<script type='text/javascript'>alert('Login failed!');</script>";
    die('<meta http-equiv="refresh" content="0;URL=\'login-redirect.php\'" />');
}
?>
<?php
function session_start_timeout($timeout=5, $probability=100, $cookie_domain='/') {
    // Set the max lifetime
    ini_set("session.gc_maxlifetime", $timeout);

    // Set the session cookie to timout
    ini_set("session.cookie_lifetime", $timeout);

    $seperator = strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN") ? "\\" : "/";
    $path = ini_get("session.save_path") . $seperator . "session_" . $timeout . "sec";
    if(!file_exists($path)) {
        if(!mkdir($path, 600)) {
            trigger_error("Failed to create session save path directory '$path'. Check permissions.", E_USER_ERROR);
        }
    }
    ini_set("session.save_path", $path);

    // Set the chance to trigger the garbage collection.
    ini_set("session.gc_probability", $probability);
    ini_set("session.gc_divisor", 100); // Should always be 100

    // Start the session!
    session_start_timeout(60, 10);

    if(isset($_COOKIE[session_name()])) {
        setcookie(session_name(), $_COOKIE[session_name()], time() + $timeout, $cookie_domain);
    }
}

?>
<?php 
session_start();

include('config.php');

foreach($_SESSION as $key => $value){
    if (strpos($key, $PROJECT_NAME) !== FALSE){
        unset($_SESSION[$key]);
    }
}

$_SESSION[$PROJECT_NAME . 'logout'] = true;
session_destroy();

//print_r($_SESSION);
header('Location:' . $base_url . 'index');
?>

优惠券.php

<?php
if(!isset($_SESSION))
{ 
  session_start(); 
}

$timeout = $_SERVER['REQUEST_TIME'];
/**
 * for a 1 minute timeout, specified in seconds
*/
$timeout_duration = 60;

if (isset($_SESSION['LAST_ACTIVITY']) && ($timeout - $_SESSION['LAST_ACTIVITY']) > $timeout_duration) {
    session_unset();
    session_destroy();
    session_start();
}

$_SESSION['LAST_ACTIVITY'] = $timeout;
?>
<?php 
// error_reporting(E_ALL); ini_set("display_errors", 1);
session_start();
$timeout = 60; // Number of seconds until it times out.

// Check if the timeout field exists.
if(isset($_SESSION['timeout'])) {
    $duration = time() - (int)$_SESSION['timeout'];
    if($duration > $timeout) {
        // Destroy the session and restart it.
        session_destroy();
    }
}

// Update the timeout field with the current time.
$_SESSION['timeout'] = time();
// include ('sessionTimeout.php');

if( !isset($_SESSION["loginSuccess"]) ){
    echo "<script type='text/javascript'>alert('Login failed!');</script>";
    die('<meta http-equiv="refresh" content="0;URL=\'login-redirect.php\'" />');
}
?>
<?php
function session_start_timeout($timeout=5, $probability=100, $cookie_domain='/') {
    // Set the max lifetime
    ini_set("session.gc_maxlifetime", $timeout);

    // Set the session cookie to timout
    ini_set("session.cookie_lifetime", $timeout);

    $seperator = strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN") ? "\\" : "/";
    $path = ini_get("session.save_path") . $seperator . "session_" . $timeout . "sec";
    if(!file_exists($path)) {
        if(!mkdir($path, 600)) {
            trigger_error("Failed to create session save path directory '$path'. Check permissions.", E_USER_ERROR);
        }
    }
    ini_set("session.save_path", $path);

    // Set the chance to trigger the garbage collection.
    ini_set("session.gc_probability", $probability);
    ini_set("session.gc_divisor", 100); // Should always be 100

    // Start the session!
    session_start_timeout(60, 10);

    if(isset($_COOKIE[session_name()])) {
        setcookie(session_name(), $_COOKIE[session_name()], time() + $timeout, $cookie_domain);
    }
}

?>
<?php 
session_start();

include('config.php');

foreach($_SESSION as $key => $value){
    if (strpos($key, $PROJECT_NAME) !== FALSE){
        unset($_SESSION[$key]);
    }
}

$_SESSION[$PROJECT_NAME . 'logout'] = true;
session_destroy();

//print_r($_SESSION);
header('Location:' . $base_url . 'index');
?>

sessionTimeout.php

<?php
if(!isset($_SESSION))
{ 
  session_start(); 
}

$timeout = $_SERVER['REQUEST_TIME'];
/**
 * for a 1 minute timeout, specified in seconds
*/
$timeout_duration = 60;

if (isset($_SESSION['LAST_ACTIVITY']) && ($timeout - $_SESSION['LAST_ACTIVITY']) > $timeout_duration) {
    session_unset();
    session_destroy();
    session_start();
}

$_SESSION['LAST_ACTIVITY'] = $timeout;
?>
<?php 
// error_reporting(E_ALL); ini_set("display_errors", 1);
session_start();
$timeout = 60; // Number of seconds until it times out.

// Check if the timeout field exists.
if(isset($_SESSION['timeout'])) {
    $duration = time() - (int)$_SESSION['timeout'];
    if($duration > $timeout) {
        // Destroy the session and restart it.
        session_destroy();
    }
}

// Update the timeout field with the current time.
$_SESSION['timeout'] = time();
// include ('sessionTimeout.php');

if( !isset($_SESSION["loginSuccess"]) ){
    echo "<script type='text/javascript'>alert('Login failed!');</script>";
    die('<meta http-equiv="refresh" content="0;URL=\'login-redirect.php\'" />');
}
?>
<?php
function session_start_timeout($timeout=5, $probability=100, $cookie_domain='/') {
    // Set the max lifetime
    ini_set("session.gc_maxlifetime", $timeout);

    // Set the session cookie to timout
    ini_set("session.cookie_lifetime", $timeout);

    $seperator = strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN") ? "\\" : "/";
    $path = ini_get("session.save_path") . $seperator . "session_" . $timeout . "sec";
    if(!file_exists($path)) {
        if(!mkdir($path, 600)) {
            trigger_error("Failed to create session save path directory '$path'. Check permissions.", E_USER_ERROR);
        }
    }
    ini_set("session.save_path", $path);

    // Set the chance to trigger the garbage collection.
    ini_set("session.gc_probability", $probability);
    ini_set("session.gc_divisor", 100); // Should always be 100

    // Start the session!
    session_start_timeout(60, 10);

    if(isset($_COOKIE[session_name()])) {
        setcookie(session_name(), $_COOKIE[session_name()], time() + $timeout, $cookie_domain);
    }
}

?>
<?php 
session_start();

include('config.php');

foreach($_SESSION as $key => $value){
    if (strpos($key, $PROJECT_NAME) !== FALSE){
        unset($_SESSION[$key]);
    }
}

$_SESSION[$PROJECT_NAME . 'logout'] = true;
session_destroy();

//print_r($_SESSION);
header('Location:' . $base_url . 'index');
?>

在页面加载时启动
Javascript
计时器,并在
计时器过期时将
用户重定向到
注销
页面

<script type="text/javascript">
setTimeout(function() { window.location.href = "logout.php"; }, 60 * 60 * 1000);
</script>

setTimeout(函数(){window.location.href=“logout.php”;},60*60*1000);

我应该把它放在哪里?:)@Rahautoson页面加载@SitiNurainiYakobwhich在index.php下@他注意到了这一点。我应该把它放在所有的页面上吗?但是我应该如何让它自动注销而不让用户加载页面呢@如果用户同时导航到另一个页面,则当前计时器将自动丢弃,并在加载该页面时启动一个新计时器。