我对PHP编程很新,我想我可能会遇到会话变量的一些安全问题。
我目前正在开发一个项目,该项目有3个需要单独登录凭据的模块。 这三个模块适用于学生,教师和行政部门。
用户登录相应的门户后,这些凭据将存储为会话变量。假设我们在浏览器中打开了2个选项卡,1个打开了学生门户,另一个打开了管理门户。如果学生在管理员插入用户ID 2 后不久登录第一个门户网站用户ID 1 ,则该门户网站的用户ID似乎相同(用户ID 1 )。问题是两个门户的会话变量都在浏览器中共享。
有时,即使在关闭之后,会话变量也会在新标签中从之前的会话中拉出。(*使用var_dump [$ _ SESSION] *测试它)
有人可以向我解释如何将会话变量限制到每个门户网站,或者向我提供一些关于php中其他安全处理方式的提示吗?
PS:我有注销按钮,可以清除会话变量。如果关闭选项卡或在新选项卡中打开新门户,则问题似乎仍然存在。
提前谢谢。答案 0 :(得分:2)
从浏览器到服务器,只会启动一个PHP会话(除了私人浏览选项,但这不是主题),并且在所有选项卡中“共享”。与@ fejese的答案所暗示的相反,您只需使用一个PHP会话即可解决您的情况。您的问题可能是您使用相同的会话变量来指示某人已登录,无论登录用户的访问级别如何。
当您的3个独立模块处理身份验证时,创建3个不同的会话变量,指示登录的用户。例如,当学生登录时,请{i} {{}}并将记录的用户(学生)ID分配给它。当教师登录时,创建$_SESSION['auth_student_id']
,等等。
然后,根据加载的门户网站,忽略其他会话变量。因此,如果在选项卡1中加载了学生门户,请检查$_SESSION['auth_teacher_id']
并忽略其他门户。如果已设置,则您知道门户网站应显示受保护的内容,因为用户(学生)已对自己进行了身份验证。如果在选项卡2中加载的教师门户网站对$_SESSION['auth_student_id']
执行相同操作,则忽略其他2。
答案 1 :(得分:1)
你有一些选择:
如果更改会话名称,则标识会话的cookie将与门户网站不同。请注意, no 会话将以这种方式共享。如果用户登录到门户,他将需要再次登录到其他人。
您可以在主$ _SESSION对象中设置一个数组,每个子模块一个数组,并使用每个数组,就像您直接使用会话一样。使用这种方法,您可以共享会话(在门户之间轻松实现SSO),但会引发一些安全问题。如果你采用这种方式,实现API来访问会话是很有价值的。