当用户登录时,我会创建一个会话:
$_SESSION['id'] = $id;
我该如何在X分钟后明确指定会话超时并使其执行函数或页面重定向?
编辑:我忘记提到我需要由于不活动而超时的会话。
当用户登录时,我会创建一个会话:
$_SESSION['id'] = $id;
我该如何在X分钟后明确指定会话超时并使其执行函数或页面重定向?
编辑:我忘记提到我需要由于不活动而超时的会话。
首先,存储用户最后一次发出请求的时间
<?php
$_SESSION['timeout'] = time();
?>
在后续请求中,检查他们上一次请求是多久以前(在此示例中为10分钟)。
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
$_SESSION['timeout']
变量将首先不会被设置。然而,我跳过了所有其他的会话管理,因为这个问题只问超时。 - Jacco当会话过期时,数据将不再存在,因此类似以下代码:
if (!isset($_SESSION['id'])) {
header("Location: destination.php");
exit;
}
会在会话不再活动时进行重定向。
您可以使用session.cookie_lifetime设置会话cookie的生存时间。
ini_set("session.cookie_lifetime","3600"); //an hour
编辑:如果您由于安全问题(而不是方便性)而将会话超时,请使用已接受的答案,正如下面的评论所示,这由客户端控制,因此不安全。我从未将其视为安全措施。
首先要检查会话是否已经创建,如果没有则创建一个。这里我设置了它只持续1分钟。
<?php
if(!isset($_SESSION["timeout"])){
$_SESSION['timeout'] = time();
};
$st = $_SESSION['timeout'] + 60; //session time is 1 minute
?>
<?php
if(time() < $st){
echo 'Session will last 1 minute';
}
?>
<?php
session_start();
if (time()<$_SESSION['time']+10){
$_SESSION['time'] = time();
echo "welcome old user";
}
else{
session_destroy();
session_start();
$_SESSION['time'] = time();
echo "welcome new user";
}
?>
<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>
在每个页面的页眉中,这对我进行站点测试非常有用(该站点尚未投入生产)。它所涉及到的HTML页面会结束会话,并提示用户需要重新登录。与使用PHP逻辑相比,这似乎是一种更简单的方法。
我希望能够听到有关这个想法的评论。我是否忽略了其中的任何陷阱?
session_cache_expire( 20 );
session_start(); // NEVER FORGET TO START THE SESSION!!!
$inactive = 1200; //20 minutes *60
if(isset($_SESSION['start']) ) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
header("Location: user_logout.php");
}
}
$_SESSION['start'] = time();
if($_SESSION['valid_user'] != true){
header('Location: ../....php');
}else{
来源: http://www.daniweb.com/web-development/php/threads/124500
<?php
session_start();
if($_SESSION['login'] != 'ok')
header('location: /dashboard.php?login=0');
if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
// session inactive more than 10 min
header('location: /logout.php?timeout=1');
}
$_SESSION['last-activity'] = time(); // update last activity time stamp
if(time() - $_SESSION['created'] > 600) {
// session started more than 10 min ago
session_regenerate_id(true); // change session id and invalidate old session
$_SESSION['created'] = time(); // update creation time
}
?>