【问题标题】:Error retrieving cookie value in included page - PHP在包含的页面中检索 cookie 值时出错 - PHP
【发布时间】:2013-10-24 16:32:36
【问题描述】:

我遇到了一个问题,我会用一个有代表性的场景来解释自己:

我有两个 php 脚本/页面:

Test1.php:

<?php
include_once('test2.php');

session_start();
$id = session_id();

echo "my session id: " .$id.'<br>';
setcookie("SSID", $id);

test(); 
?>

Test2.php:

<?php

function test() {
echo "session id on test2 <br>";
echo $_COOKIE["SSID"];
}

?>

这是我的问题的一段代表性代码,我想做的是将我的会话 ID 存储在 cookie 中并在第二页中检索它以恢复我的会话。我知道这没有必要。在我的测试服务器中我不需要这样做,但在生产服务器中这是必需的。我无法更改生产服务器的任何配置,因此我必须使代码适应服务器的配置。

我的主要问题是第二个脚本最后一次获取存储在 cookie 中的会话 ID。一个例子:

第一次执行 test1.php 我得到:

my session id: dg2mjk8ros8ajrj3n6i8oa4gj1
session id on test2 
vrulbnvvff23bpmm6qbbqbk960

第二次执行test1.php:

my session id: cj17k0q08mhgpjn9gf0dt0n9i6
session id on test2 
dg2mjk8ros8ajrj3n6i8oa4gj1

您可以看到在 test2.php 函数中检索到的 cookie 值是最后一次使用的,而不是当前的。我被困住了。

如果有任何帮助,我将不胜感激,谢谢。

【问题讨论】:

    标签: php session cookies include


    【解决方案1】:

    您的代码有问题,或者很可能是您的服务器设置有问题。您的 session_id 不应该更改,由于某种原因,您的网络服务器在每次页面加载时都会生成一个新会话。这不应该发生,它甚至违背了进行会话的目的。是否有任何其他代码正在运行,或者是这样吗?

    您的 cookie 始终与前一个值相同的原因是,$_COOKIE 数组在您的 php 代码运行之前已填充,如果您在代码中创建新 cookie,它不会更改。

    我在设置中尝试了相同的代码,每次都得到相同的 session_id 和相同的 cookie 值。

    我会尝试解决您的服务器设置问题,但如果您不能,您可以强制会话 ID 保持一致。这样做:

    if(isset($_COOKIE['SSID']) {
        session_start($_COOKIE['SSID']);
    } else {
        session_start();
    }
    

    另外,如果 cookie 已经存在,则无需创建新的:

    if(!isset($_COOKIE['SSID']) {
        setcookie("SSID", $id);
    }
    

    【讨论】:

    • 这段代码不能解决我的问题,因为从 cookie 中检索到的 SSID 不是正确的。如果我错了,请纠正我。
    • 是的,因为 session_id 的变化是问题所在。 cookie值设置正确。
    • 好的,我试试。我假设这两段代码都在 test1.php 中,对吗?
    • 是的,它替换了您开始会话和设置 cookie 的行。
    • 这是所有正在运行的代码还是您没有向我们展示的其他内容?
    【解决方案2】:

    我最终只使用会话存储解决了这个问题,但在更改生产服务器中的一些参数之前没有解决,我不知道是哪一个,抱歉。

    非常感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多