【问题标题】:PHP session, multiple pages linking to one pagePHP会话,多个页面链接到一个页面
【发布时间】:2015-06-02 23:59:04
【问题描述】:

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

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

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

页面A.php有:

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

页面 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 中的所有会话数据并用自己的替换它。

有解决办法吗?

【问题讨论】:

  • 为了展开更多,我的 A.php 和 B.php 示例是我的问题的淡化示例。实际上,我有超过 100 个页面,例如 A.php 和 B.php,并且还在不断增长。这就是为什么 A.php 和 B.php 将相同的变量传递给 ALPHABET.php,因此Alphabet 可以只获取信息并将其插入通用变量并显示它。

标签: php variables session overwrite


【解决方案1】:

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

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

例如

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"];

【讨论】:

  • 好建议。不幸的是,它不适合我的情况。我会扩大更多。我的 A.php 和 B.php 示例是我的问题的淡化示例。实际上,我有超过 100 个页面,例如 A.php 和 B.php,并且还在不断增长。因此,在 ALPHABET.php 页面中使用这样的 If 语句不是很实用。
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2017-04-08
相关资源
最近更新 更多