gpt4 book ai didi

php - 带有绝对链接的奇怪的 php session 行为

转载 作者:搜寻专家 更新时间:2023-10-31 20:53:17 25 4
gpt4 key购买 nike

我观察到我的 php 应用程序在其运行的服务器上表现得很奇怪。当用户首次访问应用程序并单击具有绝对路径的链接时, session 数据将被清除。

我尽可能简单地重现了这个问题。代码可以在下面找到。

我已经通过删除应用程序中的所有绝对链接解决了这个问题,我只是在寻找对此行为的解释

重现问题:

  1. 点击“登录”
  2. 单击“相对链接”并观察 session 仍然设置了“logged_in”变量
  3. 单击“绝对链接”并观察 session 数据似乎丢失了
  4. 单击浏览器的后退按钮,观察 session 数据已返回
  5. 点击“绝对链接”,观察 session 数据再次丢失
  6. 点击“主页(相对链接)”,观察这次 session 数据丢失
  7. 点击“登录”重置 session 数据
  8. 再次点击'绝对链接',观察这次session数据没有被清除

一些重要的注意事项:

  • 这不是我本地的问题mac 运行 MAMP使用 PHP 5.3.2,但在服务器上是一个问题php 5.2.14 和运行 5.3.2 的不同服务器
  • 单击绝对链接,然后在没有登录的情况下单击相对主页链接可防止在您登录后出现此问题。
  • 一旦通过刚才提到的方法解决了问题,它只能通过导航到不同的域、清除浏览器的缓存并导航回来来重新创建。不离开页面就清除缓存是行不通的。
  • 如果在使用 header('Location: ...') 重定向时使用绝对路径,这也是一个问题

索引.php:

<?php
session_start();

print_r($_SESSION);

?>

<br/><a href="http://www.myserver.org/page.php">Absolute link</a>
<br/><a href="page.php">Relative link</a>
<br/><a href="login.php">Log in</a> | <a href="logout.php">Log out (reset session)</a>

页面.php:

<?php

session_start();
print_r($_SESSION);

?>
<br/><a href="index.php">Home (relative link)</a>

登录.php:

<?php
session_start();
$_SESSION['logged_in'] = true;

header('Location: index.php');

注销.php:

<?php
session_start();

$_SESSION = array();
session_destroy();

header('Location: index.php');

最佳答案

至少在您的示例中,页面在两个域(rhun.ithaca.edu 和 www.ithacahealth.org)之间切换。您会注意到,如果您在两个域上都单击“登录”,那么在所有情况下您都会获得 logged_in=1。无论如何,这是问题的主要原因 - 两个不同的域。

session cookie 与任何其他 cookie 没有区别(从浏览器的角度来看),因此它们受到相同的限制 - 相关的限制是您必须在同一域中。您可以使用 session_set_cookie_params() 更改 session cookie 设置(必须在 session_start() 之前完成,但即使这样您也不能允许从不同的域,仅来自子域,如果您需要的话。

此外,我不知道它是否相关,但是将网页保留在单个域/子域上可能对搜索引擎优化有一点帮助 - 特别是在域/子域、搜索引擎之间存在不同内容的情况下可能会将它们视为不同的网页并在它们之间拆分它们的网页排名。

关于php - 带有绝对链接的奇怪的 php session 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5359137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com