【问题标题】:session_name() and session_destroy()session_name() 和 session_destroy()
【发布时间】:2013-05-24 18:48:25
【问题描述】:

我的网站上有 2 个不同的区域。站点区域和管理区域。 两者都有不同的登录功能来启动会话和设置cookie,还有注销功能来删除cookie和销毁会话。

例如:

登录:

function siteLogin(){
    ...

    session_name('siteLogin');
    session_start();
}

function adminLogin(){
    ...

    session_name('adminLogin');
    session_start();
}

退出:

function siteLogout(){
    ...

    session_name('siteLogin');
    session_start();
    session_destroy();
}

function adminLogout(){
    ...

    session_name('adminLogin');
    session_start();
    session_destroy();
}

问题:如果我在两个区域都登录,然后从一个区域注销,我会在两个区域都注销。

问题:我怎样才能防止这种情况发生?所以,如果我从一个注销,我会在另一个保持登录状态?

【问题讨论】:

  • 最好只为会话使用一个名称,并将 $_SESSION 对象划分为“区域”特定的命名空间来存储多个(模拟)会话的数据。
  • 根据documentation,当您调用session_destroy()(仅数据)时,会话cookie不会被删除。您是否在注销方法中手动删除 cookie?
  • @GeorgeCummins 我有两个不同的 cookie 名称,注销时是的,我删除了与我要注销的区域相关的 cookie 名称。
  • 同意@Niko。为每一个而不是整个单独的会话使用不同的数组键要容易得多——使用多个会话只会让自己变得更加困难。
  • @Niko 命名空间是指所有会话数据都以变量开头?比如$_SESSION['site']['data']$_SESSION['admin']['data'],然后是unset($_SESSION['admin'])

标签: php session


【解决方案1】:

session_destroy 将删除您的完整会话。如果你想删除特定的会话值使用unset 函数,有点像这样

unset($_SESSION['siteLogin']);

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 2011-05-08
    • 2015-06-11
    • 1970-01-01
    • 2023-03-24
    • 2018-08-19
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多