【发布时间】:2011-03-05 08:50:02
【问题描述】:
当用户像这样登录时,我正在创建一个会话:
$_SESSION['id'] = $id;
如何在 X 分钟的会话上指定超时,然后让它在达到 X 分钟后执行功能或页面重定向??
编辑:我忘了提到由于不活动而需要会话超时。
【问题讨论】:
标签: php session redirect login timeout
当用户像这样登录时,我正在创建一个会话:
$_SESSION['id'] = $id;
如何在 X 分钟的会话上指定超时,然后让它在达到 X 分钟后执行功能或页面重定向??
编辑:我忘了提到由于不活动而需要会话超时。
【问题讨论】:
标签: php session redirect login timeout
当会话过期时,数据不再存在,所以像
if (!isset($_SESSION['id'])) {
header("Location: destination.php");
exit;
}
只要会话不再活动,就会重定向。
您可以使用 session.cookie_lifetime 设置会话 cookie 的存活时间
ini_set("session.cookie_lifetime","3600"); //an hour
编辑:如果您出于安全考虑(而不是方便)而将会话超时,请使用已接受的答案,如下面的 cmets 所示,这是由客户端控制的,因此不安全。我从没想过这是一种安全措施。
【讨论】:
Byterbit 解决方案有问题,因为:
对于 cookie,通过 session.cookie_lifetime 设置过期时间是正确的解决方案设计和安全性!要使会话到期,您可以使用 session.gc_maxlifetime。
通过调用 session_destroy 使 cookie 过期可能会产生不可预知的结果,因为它们可能已经过期。
在 php.ini 中进行更改也是一个有效的解决方案,但它会使整个域的过期时间成为全局的,这可能不是您真正想要的 - 某些页面可能会选择保留一些 cookie 比其他页面更多。
【讨论】:
<?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
}
?>
【讨论】:
首先检查会话是否尚未创建,如果没有创建。这里我只设置了 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 逻辑更简单。 我希望有一些关于这个想法的cmets。有什么我没见过的陷阱吗?
【讨论】:
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['timeout'] = time();
?>
在随后的请求中,检查他们多久以前提出过他们的上一个请求(本例中为 10 分钟)
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
【讨论】:
$_SESSION['timeout'] 变量将不会被设置在首位。但是,我跳过了所有其他的会话管理,因为这个问题只询问超时。