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


Destroy session, but keep one variable set

我使用会话变量来控制登录和页面访问。我使用变量来控制用户所属的不同用户组,因此我有相当多的会话变量。

我还使用一个会话变量来记住用户在刷新时最后访问的页面。

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

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

谢谢Eds

你可以试试下面的代码,

$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'。你也可以在这个数组中添加更多你不想在以后删除的值。

谢谢。

你可以销毁会话,但在此之前,保存最后一页到一个变量中,你将把它放入一个新的会话变量

$lastPage = $_SESSION['last_page']美元session_destroy ();然后创建一个包含$lastPage的新会话。

另一种方法是将用户访问的最后一个页面保存到数据库的用户记录中。(这将使它可以从任何地方访问,而不是特定于位置)

回到你现有的使用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']

希望对你有帮助。

尝试在数组中分组会话变量并取消设置它们,您只需要在$_SESSION中取消设置一个或几个数组。例如,如果您将用户信息保存在会话中,请尝试这样做:

$_SESSION['user_info'] = array(...);

$_SESSION['last_visited_page'] = '...';

登出后,您可以取消设置$_SESSION['user_info']并保留$_SESSION['last_visited_page']