销毁会话,但保留一个变量集

时间:2011-09-13 10:37:26

标签: php session variables destroy unset

我正在使用会话变量来控制登录和页面访问。我使用变量来控制用户所属的不同用户组,所以我有很多会话变量。

我还使用会话变量来记住刷新时用户上次访问过的页面。

当用户注销时,我使用session_destroy();删除所有变量。 我想做的是即使在用户注销后仍保持上次访问的页面变量。

我想我可以通过在每个其他变量上使用unset函数来实现它,但是有很多,并且想知道是否有更简单的方法?

由于 编

4 个答案:

答案 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']

相关问题