我想知道是否有人遇到过这样的问题:用户打开web应用程序的多个选项卡或窗口,然后发现应用程序的某些部分正在使用其他窗口/选项卡的数据(我相信你已经遇到了)。
显然,之所以会出现这种情况,是因为选项卡/窗口共享相同的PHP会话ID,因此当您调用一条记录并将其ID存储在会话中时,第二个窗口的调用会替换第一个窗口的ID,这可能会导致所有类型的头痛。
你想出了什么解决方案来避免这个问题?将ID放入隐藏字段?在脚本顶部使用会话名称重写(我希望避免)?我对你为这个问题想出的解决办法很好奇。我的设计是垃圾吗?我不应该那样做?大玩家是如何解决这个问题的?
和我在这里提出的问题一样。。。
<?php
session_start();
// some code ...
// if user successful login
$_SESSION['user_id'] = $users_id
// we redirect user to member page
if (isset($_SESSION['user_id']){
header("Location:members.php");
}else{
header("Location:login.php");
}
?>
members.php
<?php
session_start();
if (!isset($_SESSION['user_id']){
header("Location:login.php");
}
echo "welcom user : {$_SESSION['user_id']}";
?>
if(isset($_SESSION['user_id']) && !empty($_SESSION['user_id']))
{
echo "welcom user : {$_SESSION['user_id']}";
}
else
{
header("Location:login.php");
}
不幸的是,在PHP中,没有有效的解决方案来跨多个窗口选项卡生成多个会话。
作为解决方案,您可以使用javascript HTML5 SessionStorage(window.SessionStorage)
您将生成一个随机id,并将其保存在每个浏览器选项卡的会话存储中。然后每个浏览器选项卡都有自己的id。