【问题标题】:Destroy session, but keep one variable set销毁会话,但保留一个变量集
【发布时间】:2011-11-16 01:27:05
【问题描述】:

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

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

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

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

谢谢 编辑

【问题讨论】:

    标签: php session variables 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 中的一个变量,而不是一个一个地进行
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 2015-05-12
      • 2010-10-08
      • 1970-01-01
      • 2014-05-25
      • 2021-08-14
      相关资源
      最近更新 更多