【问题标题】:PHP Sessions not storedPHP 会话未存储
【发布时间】:2013-09-11 05:02:06
【问题描述】:

我有两个页面,但是第二个页面没有收到$_SESSION["1"]

更新:事实证明,如果我在会话中输入一个数字,它将不起作用。我输入了一个正常的字符串并工作了..我从未见过这种情况发生

第一个

<?php
session_start();
$_SESSION["1"] = "LOGGED";
?>

第二次

<?php
session_start();

echo $_SESSION["1"];
?>

为什么这不起作用?

【问题讨论】:

  • 给我们更多继续。它可以是任何东西,从配置问题到您的一些(愚蠢)错误。无论哪种方式,我们都需要更多信息。
  • 添加“php-internals”标签,因为这个问题可能与$_SESSION 内部索引和序列化/反序列化处理有关,在那里可以得到更好的回答。
  • 关于标记为重复的问题:我看不到这个问题和this 之间的关系,因为这个问题是关于一个设置为单个数字的会话变量,与$_SESSION['views'] = $_SESSION['views']+ 1; 没有关系增加一个数字。

标签: php session php-internals


【解决方案1】:

带有单个数字的会话变量将不起作用,但 1a 将起作用,a1 也将起作用,甚至一个“字母”a 也将起作用。

第一个

<?php
session_start();
$_SESSION["a1"] = "LOGGED";
?>

第二次

<?php
session_start();
echo $_SESSION["a1"];
?>

PHP.net 手册中关于会话变量的示例

<?php
$_SESSION[1][1] = 'cake'; // fails

$_SESSION['v1'][2] = 'cake'; // works
?>

来源:http://php.net/manual/en/language.types.array.php


编辑:

  • 根据bob-the-destroyer的评论:

要添加有关数组键的内容,来自php.net/manual/en/language.types.array.php,“包含有效整数的字符串将被强制转换为整数类型”。 $_SESSION 上的手册说“一个关联数组”。所以从字面上看是一个关联数组......?如果有关访问和存储会话数据的这一点重要信息仍然隐藏在手动 cmets 中,这对任何人都没有好处。

【讨论】:

  • 是的,我在你之前就发现了,但无论如何,你有。
  • @JohnBlack 如果您认为这回答了您的问题,请接受它是正确的,否则它将保留在“未回答”类别中。
  • 是的,给获胜者一个接受(如果答案是真的),我们正在以这种方式浏览这个问题......!
  • @Xfile OP 可以选择接受或不接受。但是,我确实完全测试了我的答案,并在 PHP.net 网站上找到了对它的引用。干杯
  • 添加关于数组键的内容,来自php.net/manual/en/language.types.array.php,“包含有效整数的字符串将被转换为整数类型”。 $_SESSION 上的手册说“关联数组”。所以从字面上看是一个关联数组......?如果有关访问和存储会话数据的这一点重要信息仍然隐藏在手动 cmets 中,这对任何人都没有好处。如果可以,请更新 PHP 手册页本身以包含此注释。
【解决方案2】:

您可以将 $_SESSION 分配给定义 $_SESSION 用途的名称,例如。 $_SESSION['logged'] = 已记录;不要忘记以字母开头 $_SESSIONS,并使它们更具描述性。这使您的代码更具可读性和易于理解

【讨论】:

    【解决方案3】:

    行为的原因是 C 变量声明。由于变量名称不能以数字开头。

    【讨论】:

    • 你能具体说明这与 PHP 的 $_SESSION 超全局数组有什么关系吗?
    • 为此您必须查看 PHP 中的 SESSION 源代码。但简单的是 $_SESSION 是 SESSION(variable,...) 的函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多