PHP会话冲突

时间:2013-07-15 11:14:16

标签: session 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']}";
?>

2 个答案:

答案 0 :(得分:0)

if(isset($_SESSION['user_id']) && !empty($_SESSION['user_id']))
{
 echo "welcom user : {$_SESSION['user_id']}";
}
else
{
 header("Location:login.php");
}

答案 1 :(得分:0)

不幸的是,在PHP中,没有有效的解决方案可以在多个Windows标签之间生成多个会话。

为此,您可以使用JavaScript HTML5 SessionStorage(window.sessionStorage)

您将生成一个随机ID,并按“浏览器”选项卡保存在会话存储中。然后,每个浏览器选项卡都有自己的ID。