PHP会话冲突



我想知道是否有人遇到过这样的问题:用户打开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。

最新更新