Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中分别销毁管理会话和用户会话?_Php_Session - Fatal编程技术网

如何在PHP中分别销毁管理会话和用户会话?

如何在PHP中分别销毁管理会话和用户会话?,php,session,Php,Session,我目前正在使用一个应用程序,其中我面临一个明显的问题。我的应用程序中有两个主要面板,一个是管理面板,另一个是用户面板 假设管理员当前登录到他的面板,同时用户面板上的一些用户可能已经登录。如果我在PHP中使用以下代码注销并重定向到登录页面(当管理员或任何用户注销时),会发生什么情况 让我们假设一个用户正在注销,而管理员仍在登录。上面的代码将破坏会话,因此,管理员也将注销并重定向到登录页面 我知道session可以像这样取消设置unset($\u session['something'),但是记住应

我目前正在使用一个应用程序,其中我面临一个明显的问题。我的应用程序中有两个主要面板,一个是管理面板,另一个是用户面板

假设管理员当前登录到他的面板,同时用户面板上的一些用户可能已经登录。如果我在PHP中使用以下代码注销并重定向到登录页面(当管理员或任何用户注销时),会发生什么情况

让我们假设一个用户正在注销,而管理员仍在登录。上面的代码将破坏会话,因此,管理员也将注销并重定向到登录页面

我知道session可以像这样取消设置
unset($\u session['something')
,但是记住应用程序中使用的所有会话变量是一个乏味的过程,因为双方(管理员和用户)都已经使用了太多的会话变量


是否有办法分别销毁管理会话和用户会话?我的意思是,当用户注销其会话时,其会话将被破坏,这绝对不会影响管理会话,反之亦然。

会话在用户之间是独立的。仅仅因为一个用户注销并不意味着每一个会话都会被破坏-只是注销用户的会话而已。

简单解决方案-为您的VAR添加一个级别,以便管理员和用户VAR位于完全不同的部分,例如

$_SESSION['admin']['setting1'] = 'someval';
$_SESSION['admin']['setting2'] = 'otherval';

$_SESSION['user']['setting3'] = 'foo';
$_SESSION['user']['setting4'] = 'bar';
然后,如果用户从管理部分注销,这是一个简单的问题

unset($_SESSION['admin']);

而且POOF,所有的管理员变量都消失了。

为什么在我的案例中,当一个用户注销时,当前在其面板中工作的管理员也会自动注销,反之亦然?您是否在同一个浏览器(换句话说,使用同一个会话)中进行测试?管理员和用户现在都在同一个本地主机上。这就是问题所在吗?不,我的意思是你是以管理员身份登录,然后以用户身份再次登录到同一个浏览器中吗?是的,我使用的是同一个浏览器。你不需要“记住会话变量”,只需使用
array\u键($\u session)
就可以立即拥有一个包含所有会话变量名称的数组。“上面的代码将破坏会话,因此管理员也将注销并重定向到登录页面。”上面的代码不会导致这种情况发生,尽管可能是其他代码造成的。@chris:)但这是在我登录到
管理员
面板时发生的,与用户和用户同时发生(指我自己)注销,导致管理员注销并重定向到登录页面。这只是因为您的应用程序允许用户同时成为管理员。
unset($_SESSION['admin']);