PHP会话,链接到一个页面的多个页面

时间:2015-03-30 04:10:14

标签: php variables session overwrite

好的,我刚刚注意到这个问题。必须有办法绕过它。

...例 在页面A.php和页面B.php上,有一个指向ALPHABET.php页面的链接。 ALPHABET.php接收指定的变量值,具体取决于哪个页面是引用者。

所涉及的所有页面都有session_start();在开始。

Page A.php有:

           <?php 
                $_SESSION['name'] = "John";
           ?>

Page B.php:

           <?php 
                $_SESSION['name'] = "Jane";
           ?>

页面ALPHABET.php有:

           <?php
                $personName = $_SESSION['name'];
                echo "Hello, I am ".$personName;
           ?>

我决定不在ALPHABET.php中关闭会话,因为如果有些刷新页面,我希望信息仍能正确加载。如果会话已关闭,则$ _SESSION ['name']将不存在或具有值。

这一切都运行良好,直到我同时加载两个页面,A.php和B.php(通过新标签)。我注意到,当我在其中任何一个页面上单击ALPHABET.php的链接时,它并不总是从作为引用者的页面获取会话信息。我注意到在这种情况下,加载的最后一页将在ALPHABET.php中显示其信息,而不是我点击链接的页面。

即。我加载了两个页面。首先是A.php然后我在新标签中打开B.php。我点击了A.php里面的ALPHABET.php链接。 ALPHABET.php加载B.php的信息。我认为这是因为B.php是要加载的最后一页,因此它覆盖了A.php中的所有会话数据并将其替换为自己的。

这是否有解决方法?

1 个答案:

答案 0 :(得分:1)

PHP会话存储在cookie中,cookie在浏览器的所有选项卡之间共享。例如。只是通过使用香草会议来解决这个问题并不是一个好办法。

然而,一种有效的方法是将信息存储在两个单独的变量中,然后发出特定于每个引用者的GET请求。

E.g。

a.php只会

$_SESSION["A_name"] = "John";
?>

<a href="Alphabet.php?ref=A">Click</a>

B.php

$_SESSION["B_name"] = "Jane";
?>

<a href="Alphabet.php?ref=B">Click</a>

Alphabet.php

if($_GET["ref"] == "A")
    echo $_SESSION["A_name"];
else if($_GET["ref"] == "B")
    echo $_SESSION["B_name"];