当用户登录时一样,所以我创建一个会话:PHP会话超时
$_SESSION['id'] = $id;
我怎么能在X分钟即会话指定超时,然后把它执行功能或页面重定向一次它已经达到了X分钟?
编辑:我忘了提及,我需要会议超时由于不活动。
当用户登录时一样,所以我创建一个会话:PHP会话超时
$_SESSION['id'] = $id;
我怎么能在X分钟即会话指定超时,然后把它执行功能或页面重定向一次它已经达到了X分钟?
编辑:我忘了提及,我需要会议超时由于不活动。
第一,存储用户最后一次在随后的请求提出的要求
<?php
$_SESSION['timeout'] = time();
?>
,检查多久前,他们做了他们以前的请求(在这个例子中10分钟)
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
但是,如果您的PHPINI中的默认会话超时时间短于您的时间选择。 默认情况下,超时通常少于一个小时。 如果您不希望客户端控制超时,则需要将此代码与session.cookie_lifetime的ini_set组合起来。 此答案也不处理客户端删除其Cookie的情况。 – Olhovsky 2012-07-27 11:32:27
PHP默认为'0',意思是:“在浏览器关闭之前”。如果浏览器删除了这个cookie,'$ _SESSION ['timeout']'var就不会被设置在第一位。但是,我忽略了所有其他的会话管理,因为这个问题只会询问超时。 – Jacco 2012-09-08 09:50:24
当会话过期数据不再存在,所以像
每当会话不再活性if (!isset($_SESSION['id'])) {
header("Location: destination.php");
exit;
}
将重定向。
您可以设置会话cookie是多久活着使用session.cookie_lifetime
ini_set("session.cookie_lifetime","3600"); //an hour
编辑:如果您由于安全问题(而不是方便,)使用接受的答案,如下面的评论定时会话了显示,这是由客户端控制,因此不安全。我从来没有想到这是一个安全措施。
你必须删除$ _SESSION ['id']周围的引号 – 2010-06-18 10:18:16
即使你没有投票答案,你的解决方案似乎更安全,我的问题是,你是否必须在每个页面上设置会话超时?我想这是有道理的,因为你会希望它每次重新启动?其次,你是否必须为每个页面执行session_start来获取会话数据,或者只需要一次就可以启动它?谢谢 – nagates 2011-06-28 07:25:51
会话cookie生命周期中存在一些问题,最值得注意的是,它依赖*客户端*来执行它。 Cookie的使用期限是为了让客户清理无用的/过期的cookies,它不会与任何与安全相关的问题混淆。 – Jacco 2011-07-08 12:01:04
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
只是谷歌搜索你遇到的第一个答案,并将其粘贴到堆栈溢出不利于本网站的重点。此外,session_cache_expire()与会话的长度无关,因此您粘贴的答案有不正确的信息。 – 2013-04-23 15:37:46
@DavidBradbury默认情况下,cookie存储session_id,如果cookie过期,则session_id无法在客户端请求时访问。 – 2016-12-27 05:44:17
只是先检查会议是不是阿雷dy创建,如果不创建一个。在这里我只设置它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';
}
?>
<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>
在每一页的页眉中现场测试已经为我工作(该网站是尚未制作)。它所属的HTML页面结束会话,并只是通知用户需要重新登录。这似乎比使用PHP逻辑更简单。 我很想谈谈这个想法。任何陷阱我没有看到它?
并非所有人都使用js – chuckieDub 2013-06-04 19:29:22
如果您使用同一站点打开了多个选项卡,则必须全部刷新才能创建一个活动,否则如果您继续在1个选项卡中工作,其他人将在超时后显示“timeout_session.htm”。非常令人沮丧,特别是如果“timeout_session.htm”未设置/销毁会话。 =) – 2016-09-08 19:00:44
<?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";
}
?>
<?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
}
?>
确保评论你的答案,并解释你在哪里以及如何添加超时。 – Rias 2015-04-21 21:20:19
Byterbit溶液是问题的,因为:
用于cookie,通过session.cookie_lifetime设置过期是设计智能和安全智能的正确解决方案!为了使会话过期,你可以使用session.gc_maxlifetime。
到期调用session_destroy,因为他们可能已经过期,可能会产生不可预知的结果饼干。
使php.ini中的变化也是一个有效的解决方案,但它使全球有效期为这可能不是你真正想要的整个领域 - 某些页面可能选择保留一些饼干比别人多。
的可能重复[我怎样在30分钟后到期PHP的会话?](http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-分钟) – Kzqai 2012-03-06 19:12:46