2016-08-30 31 views
1

如何设置一定的时间来销毁会话?任何人都可以在10分钟后向我展示破坏会话的正确方法吗?这里是我的代码:在特定时间的php会话超时

会议授权:

session_start(); 
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) { 
    header("location: index.php"); 
    exit(); 
} 

会话注销:

session_start(); 
unset($_SESSION['SESS_MEMBER_ID']); 
unset($_SESSION['SESS_FIRST_NAME']); 
unset($_SESSION['SESS_LAST_NAME']); 
header("location: index.php"); 

会话登录:

if($result) { 
    if(mysql_num_rows($result) == 1) { 
     //Login Successful 
     session_regenerate_id(); 
     $member = mysql_fetch_assoc($result); 
     $_SESSION['SESS_MEMBER_ID'] = $member['id']; 
     $_SESSION['SESS_USER_ID'] = $member['username']; 
     $_SESSION['SESS_FIRST_NAME'] = $member['first_name']; 
     $_SESSION['SESS_LAST_NAME'] = $member['last_name']; 
     $_SESSION['SESS_USER_TYPE'] = $member['acc_type']; 
     session_write_close(); 
     header("location: user_profile.php"); 
     exit(); 
    } else { 
     header("location: loginerr.php"); 
     exit(); 
    } 
} else { 
    die("Query failed"); 
} 
+0

在10分钟后调用ajax函数的前端setTimeout中,由ajax调用的后端脚本调用session_destroy() –

+0

10分钟的不活动或仅10分钟?您不能_automatically _注销它们,但可以在10分钟后尝试访问时再登录。 – AbraCadaver

+0

10分钟不活动。 – Varma

回答

1

你不能,除非你滚动你自己的激情处理系统。默认的会话清理系统是随机运行的。每调用一次调用session_start()的PHP脚本,都有可能触发垃圾回收器。

当GC启动时,它基本上遍历会话存储目录并查找任何未超过默认过期期限的文件,并删除任何“陈旧”的文件。

根据定义,如果使用会话(例如调用session_start()并且该特定会话文件被加载),则它不能被陈旧并且不会被删除。

您需要外部系统来安排删除操作,例如,使用at调度程序。

+0

我会等待澄清。在10分钟或10分钟不活动后,您可以在访问尝试时注销它们。只是在10分钟时不自动_ – AbraCadaver

+0

如果有人在10分钟内不工作,我想破坏会话。 – Varma

+0

然后将会话超时设置为10分钟,并且每当GC启动时,它都会自动将任何超过10分钟的会话文件加以核实。 –