Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.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,我的项目中有三个文件夹,学生,教师,管理员 它们中的每一个都有一个登录页面,该页面在有效时启动会话,然后重定向到index.php。它们中的每一个都有logout.php,它会破坏会话,然后重定向到login.php 我有什么问题? 如果我登录到学生,然后打开教师或管理员,我将登录这些服务。如果我注销其中一个,我将注销所有的 如何使这些会话“单独”运行?您可以命名每个会话并销毁特定会话 使用session\u name()和unset()可以获得您想要的结果 因此,session\u name(

我的项目中有三个文件夹,学生教师管理员

它们中的每一个都有一个登录页面,该页面在有效时启动会话,然后重定向到index.php。它们中的每一个都有logout.php,它会破坏会话,然后重定向到login.php

我有什么问题?

如果我登录到学生,然后打开教师管理员,我将登录这些服务。如果我注销其中一个,我将注销所有的


如何使这些会话“单独”运行?

您可以命名每个会话并销毁特定会话

使用
session\u name()
unset()
可以获得您想要的结果

因此,
session\u name('teacher')
将为教师帐户注册一个会话

要销毁该特定会话,请使用
unset($\u会话['teacher'])


一些示例

某些初始化文件或全局文件

session_name('teacher');
session_start();
在logout.php中,可能会传递cookie或查询字符串以标识要取消的会话

unset($_SESSION['teacher']);

虽然,从安全性的角度来看,注销事件理论上应该清除会话中的所有用户数据,但您可能可以通过对模块进行分类来避免它

如果您将会话变量映射为如下内容

$_SESSION = array (
                    'student' => array(..),
                    'teacher' => array(..),
                    'admin'   => array(..),
);

只需取消设置()一个或多个$\u会话[…]即可清除特定模块。您还可以通过检查$\u SERVER['HTTP\u REFERER']变量来确定单击了哪个注销链接。希望能有帮助

使用
session\u name()
为会话命名并销毁特定会话。所以session_name('teachers')->unset($_session['teachers'])使用类来构建会话,然后给每个会话命名。注销时,不是销毁会话,而是将其强制转换为null并取消设置。若要测试是否已登录,可以对会话使用的实例,以查看它是否是会话类的实例。是的,可以在会话中存储类实例,我已经做了很多年了。在这里看到更多,非常感谢!我应该这样用吗?
session_start()
会话名称('admin')另外,如何在会话中输入数据?
$\u SESSION['login']=$login
上面的代码使用SESSION\u name('admin')无法工作;在启动会话之前声明名称。您可以使用$\u session[]正常处理会话。您可以尝试转储$\会话以查看会话数据。