【问题标题】:PHP session array keeps changingPHP会话数组不断变化
【发布时间】:2012-09-25 10:39:10
【问题描述】:

我有两页。在一页上,我向$_SESSION 添加了一个数组。在第二页上,我正在读取数组(成功),然后从 $_SESSION 读取数组 unset

然而发生的情况是,第二页显示的值与会话中存储的第一页不同 - 这让我认为第一页被一次又一次地调用,但如果我在会话并且自己重新加载页面?

我做错了什么?谢谢

编辑:忘了提到第二个脚本是由网站上的 flash 文件请求的。 Flash 文件将会话 ID 作为其参数之一,然后将其发送到第二个脚本以加载正确的会话(session_id($_REQUEST['token']); 部分)。

第 1 页:

$_SESSION['HEADER_MODEL'] = getModelForHeaderVideo();
/*
    [HEADER_MODEL] => Array
        (
            Yes these are just random numbers (for testing)
            [modID] => 303768959
            [modUsername] => 347073152
        )
*/

第 2 页:

<?php
        session_id($_REQUEST['token']);
        session_start();

        header('Content-Type: text/html; charset=utf-8');

        if (!isset($_SESSION['HEADER_MODEL']['modID']) || (trim($_SESSION['HEADER_MODEL']['modID']) == '')) {
                echo "modID=0";
        } else {
                echo "&modID={$_SESSION['HEADER_MODEL']['modID']}&modUsername={$_SESSION['HEADER_MODEL']['modUsername']}";
                unset($_SESSION['HEADER_MODEL']);
        }
?>

【问题讨论】:

  • 我认为问题出在session_start()..您为什么要在第 2 页开始新会话?
  • 你知道session_id是做什么的吗?
  • 我很抱歉。我忘记了一些重要的信息。 Flash 电影请求第二个文件从中获取值。我将会话 ID 发布到第二个文件以加载相同的会话。我昨天在某个地方看到了这个解决方案。我将其添加到原始问题中。
  • @Jon 哦,我刚刚读到:“当使用会话 cookie 时,为 session_id() 指定一个 id 将始终在调用 session_start() 时发送一个新 cookie,无论当前会话 id 是与正在设置的相同。”。你说的是这个吗?但是如果它是一个新会话,那么数组应该是空的,就像我说的那样,它不是。每次我加载第二页时它都会不断变化。

标签: php arrays session


【解决方案1】:

请参考PHP文档

注意:使用会话 cookie 时,为 session_id() 指定 id 将始终在调用 session_start() 时发送一个新 cookie,无论当前会话 id 是否与设置的相同。

PHP 会话数组不断变化,因为这是您的代码指示它执行的操作

【讨论】:

  • 是的,我刚刚读到它 - 在上面的答案中发表了关于它的评论。但是,在页面引用时,我在 HEADER_MODEL 数组中获得了新值,这意味着再次插入到会话中。但怎么可能呢?我很抱歉,但我不明白.. 谢谢。
  • 因为第二页是从flash文件中调用的。这不是正确的做法吗?
  • 嗯,更具建设性的评论应该是解释为什么这不是正确的方法。
猜你喜欢
  • 2021-02-25
  • 2019-06-28
  • 2014-05-18
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多