销毁会话,但保留一个变量集
Posted
技术标签:
【中文标题】销毁会话,但保留一个变量集【英文标题】:Destroy session, but keep one variable set 【发布时间】:2011-11-16 01:27:05 【问题描述】:我正在使用会话变量来控制登录和页面访问。我使用变量来控制一个用户所属的不同用户组,所以我有相当多的会话变量。
我还使用会话变量来记住用户在刷新时上次访问的页面。
当用户注销时,我使用 session_destroy();删除所有变量。 我想做的是即使在用户注销后也保持上次访问的页面变量。
我想我可以通过对每个其他变量使用 unset 函数来做到这一点,但是有很多,想知道是否有更简单的方法?
谢谢 编辑
【问题讨论】:
【参考方案1】:你可以销毁会话,但在这样做之前,将最后一页保存到一个变量中,然后你将把它放入一个新的会话变量中。
$lastPage = $_SESSION['last_page'] $session_destroy(); 然后创建一个包含 $lastPage 的新会话。
另一种方法是将用户访问的最后一页保存到数据库的用户记录中。 (这将使它可以从任何地方访问,并且不会特定于位置)
【讨论】:
这也是一个好主意,就像所有其他人一样。这可能是我将来会去的东西!谢谢!!编辑【参考方案2】:你可以试试下面的代码,
$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”之外的所有会话变量。您还可以在此数组中添加更多您以后不想删除的值..
谢谢。
【讨论】:
【参考方案3】:回到你现有的使用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']
希望对您有所帮助。
【讨论】:
我现在已经有了另一个答案,但这是个好建议,谢谢!编辑【参考方案4】:尝试将会话变量分组到数组中并取消设置它们,您只需取消设置$_SESSION
中的一个或多个数组。例如,如果您将用户信息保留在会话中,请尝试以下操作:
$_SESSION['user_info'] = array(...);
$_SESSION['last_visited_page'] = '...';
注销后您可以取消设置$_SESSION['user_info']
并保留$_SESSION['last_visited_page']
【讨论】:
没有必要创建 $_SESSION['user_info']** 数组..这根本没用。所有会话变量都将仅在 **$_SESSION 中获取..Thx IMO 它更有用,因为您可以取消设置所有您需要的,只需取消设置 $_SESSION 中的一个变量,而不是一个一个地进行以上是关于销毁会话,但保留一个变量集的主要内容,如果未能解决你的问题,请参考以下文章