3

I am using session variables to control logins and page access. I use variables to control different user groups that a user belongs to, so I have quite a few session variables.

I also use a session variable to remember the users last visited page upon refresh.

When the user logs out, I use session_destroy(); to remove all variables. What i would like to do is to maintain the last visited page variable even after the user has logged out.

I think I could do it by using the unset function on every other variable, but there are a lot, and was wondering if there was an easier way?

Thanks Eds

4

4 回答 4

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”之外的所有会话变量。您还可以在此数组中添加更多值,您以后不想删除这些值..

谢谢。

于 2011-09-13T10:43:09.060 回答
0

好吧,您可以销毁会话,但在这样做之前,将最后一页保存到您将放入新会话变量的变量中。

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

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

于 2011-09-13T10:41:46.440 回答
0

回到你现有的 using 后备解决方案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']

希望有帮助。

于 2011-09-13T10:44:17.320 回答
0

尝试将您的会话变量分组到数组中并取消设置它们,您只需要取消设置$_SESSION. 例如,如果您将用户信息保留在会话中,请尝试以下操作:

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

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

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

于 2011-09-13T10:44:29.643 回答