我正在使用会话变量来控制登录和页面访问。我使用变量来控制用户所属的不同用户组,所以我有很多会话变量。
我还使用会话变量来记住刷新时用户上次访问过的页面。
当用户注销时,我使用session_destroy();删除所有变量。 我想做的是即使在用户注销后仍保持上次访问的页面变量。
我想我可以通过在每个其他变量上使用unset函数来实现它,但是有很多,并且想知道是否有更简单的方法?
由于 编
答案 0 :(得分:1)
您可以尝试以下代码,
$Arr_not_destoy_session = array('last_visited_id');
foreach($_SESSION as $sees_key => $sess_val ){
if(!in_array($sees_key, $Arr_not_destoy_session)){
unset($_SESSION[$sees_key]);
}
}
这将取消设置除'last_visited_id'以外的所有会话变量。你也可以在这个数组中添加更多你不想在以后删除的值。
感谢。
答案 1 :(得分:0)
您可以销毁会话,但在此之前,请将最后一页保存到您将放入新会话变量的变量中。
$ lastPage = $ _SESSION [' last_page'] $ session_destroy(); 然后用$ lastPage创建一个新会话。
另一种方法是将用户访问的最后一页保存到数据库的用户记录中。 (这将使它可以从任何地方访问,它不会是位置特定的)
答案 2 :(得分:0)
回到你现有的使用unset()
的后备解决方案,你说这个问题是有很多,但这不应该让它变得困难;我仍然认为这是解决问题的好方法。
首先,你可以使用foreach()
循环取消它们全部;这只需要几行代码:
foreach($_SESSION as $key=>$value) {
if($key != "the_one_you_want_to_keep") {
unset($_SESSION[$key]);
}
}
另一种方法是在子数组中组织会话数据,这样您就可以通过取消设置单个顶级数组变量来清除它们,但是将其他会话数据保留在其他子数组中不变:
unset($_SESSION['user_data']);
//but don't unset $_SESSION['data_to_keep']
希望有所帮助。
答案 3 :(得分:0)
尝试将会话变量分组到数组中并取消设置它们,您只需要在$_SESSION
中取消设置一个或多个数组。例如,如果您在会话中保留用户信息,请尝试以下操作:
$_SESSION['user_info'] = array(...);
$_SESSION['last_visited_page'] = '...';
退出后,您可以取消设置$_SESSION['user_info']
并保留$_SESSION['last_visited_page']