PHP会话超时

我正在创build一个会话,当用户login像这样:

$_SESSION['id'] = $id; 

我怎样才能指定在X会议的会话超时,然后让它执行一个函数或页面redirect一旦达到X分钟?

编辑:我忘了提到,我需要会议超时由于不活动。

首先,存储上次用户发出请求的时间

 <?php $_SESSION['timeout'] = time(); ?> 

在随后的请求中,检查他们多久之前做出了他们以前的请求(在这个例子中是10分钟)

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

当会话到期时,数据不再存在,所以类似

 if (!isset($_SESSION['id'])) { header("Location: destination.php"); exit; } 

将在会话不再活动时redirect。

您可以使用session.cookie_lifetime设置会话cookie的活动时间

 ini_set("session.cookie_lifetime","3600"); //an hour 

编辑:如果您是由于安全考虑(而不是方便性)计时会话,使用接受的答案,如下面的评论显示,这是由客户端控制,因此不安全。 我从来没有想到这是一个安全措施。

只要检查第一个会议尚未创build,如果不创build一个。 在这里,我只设置它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> 

每个页面的标题在现场testing期间一直在为我工作(该网站尚未投入生产)。 它的HTML页面结束会话,并通知用户需要重新login。 这似乎比玩PHP逻辑更容易。 我想对这个想法提出一些意见。 任何陷阱我没有看到它?

 <?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"; } ?> 

Byterbit解决scheme是有问题的,因为:

  1. 让客户端控件到期的服务器端cookie是一个安全问题。
  2. 如果服务器端设置的超时时间小于客户端设置的超时时间,页面将不会反映cookie的实际状态。
  3. 即使为了开发阶段的舒适,这也是一个问题,因为它不能在发布阶段反映正确的行为(在时间上)。

对于cookies,通过session.cookie_lifetime设置过期是正确的解决schemedevise和明智的安全! 为了使会话过期,您可以使用session.gc_maxlifetime。

通过调用session_destroy过期cookie可能会产生不可预知的结果,因为它们可能已经过期。

使php.ini中的变化也是一个有效的解决scheme,但它使整个域的到期全球可能不是你真正想要的 – 有些网页可能会select保留一些cookie比其他更多。

  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 } ?>