我正在制作一个基于 php 的应用程序。当两个用户从不同选项卡中的同一浏览器登录时,他们可以访问彼此的页面。 如何预防这种情况?
我看到有 4 种解决方案:
-
您可以尝试为该窗口(在本例中为选项卡)命名,以使用 JavaScript 检测特殊窗口:
if(window.name==4711) {...}
-
使用带有 GET 参数而不是 cookie 的会话。
-
使用随机子域和在该子域上运行的普通 Cookie。
-
使用普通的cookie,该cookie仅限于"虚拟"目录,该目录在使用mod_rewrite时并不真正存在。基于此评论的想法。
使用 $_SESSION
或 $_COOKIE
来存储用户登录并更新数据库时创建的生成的密钥,以便在用户更改页面时,您可以根据生成的密钥访问其信息。此外,您可能还需要创建一个检查密钥的简单function
,而不是为您的页面使用另一个功能,如果它像菜单栏或登录框,请将其包装在像这样的if statement
中
if(checkUser($_COOKIE['MYSID'])){
// User is logged in so show whatever
} else {
// Login box here
}
使用window.name
属性或按打开浏览器选项卡的时间为每个用户设置 cookie。
您的应用程序没有检查用户当前是否登录,因此您必须执行的操作首先当用户输入凭据并登录时设置会话变量
$_SESSION['logged_in'] = "true";
然后,您必须对索引页面进行一些修改,如下所示
<?
if($_SESSION['logged_in']=='true'){
header('location:USERS_SPECIFIC_PAGE_AFTER_LOGIN.EXT')
}
else{
header('location:login_page.ext');
}
?>