【发布时间】: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'])?