【问题标题】:Why does this `$_SESSION = $_POST` fail?为什么这个 `$_SESSION = $_POST` 会失败?
【发布时间】:2012-07-26 22:07:01
【问题描述】:

我在这里缺少什么?这是我的 PHP 文件:

<?
session_start();

echo print_r($_SESSION);
echo "<br>";
echo print_r($_POST);

// Save input in session
$_SESSION = $_POST;
echo "test1";
?>

<br>
test2

此文件是通过表单提交访问的,我确定发布数据存在。输出是:

数组 ( [登录] => 1 ) 1
数组([名称] => 测试 [类型] => 测试)1
测试2

这对我来说毫无意义。 session 内容和post 内容打印没有问题。

但是$_SESSION = $_POST; 似乎失败了,直到?&gt; 的其余脚本都没有给出任何响应,这很明显,因为没有打印test1 文本。

我不知道$_SESSION = $_POST; 会发生什么。我在 SO 和其他地方找到的所有问题都提供了这种在会话中存储帖子数据的方式。

我知道在任何输出之前都需要session_start();。在这种情况下是否还需要其他东西?

我错过了什么?


更新 - 测试文件

完整测试文件的确切代码(链接已删除)是:

<?
session_start();
?>

<html>
<head>

</head>
<body>

<?

echo print_r($_SESSION);
echo "<br>";
echo print_r($_POST);

// Save input in session
$_SESSION = $_POST;
echo "test1";
?>

<p>test2</p>

<form method="post" action="test.php">
    Type something to test: <input type="text" name="testfield" id="testfield">
    <input type="submit" value="Submit">
</form>

</body>
</html>

更新 - 已解决?

好的,现在解决了。但这很奇怪……

问题显然是由评论引起的。 // 阻止脚本在 &lt;?..?&gt; 括号内运行。当我删除评论// Save input in session 时,它可以工作...?

现在我在这里缺少什么?它必须是一些php设置或其他东西。或者可能是某些已更改的文件或脚本数据。我想既然@CodeCaster 让它工作了,我的电脑上就会发生一些事情......但是 cmets 在其他任何地方都可以工作吗?有人见过这个吗?

【问题讨论】:

  • echo "test1" 并得到 test2 的结果?是同一个脚本吗?是否使用post 方法向该脚本提交了任何内容?
  • 请发布实际代码,因为您发布的代码确实有效。此外,如果 PHP 似乎“没有打印任何内容就失败”,请启用错误报告。
  • 已更正。我错过了最后一行
  • 这不是实际代码,请自行测试。这有效,并且也打印了test1
  • @CodeCaster。是的,这是实际的代码。我做了一个测试文件给你看。请参阅上面的更新。 test1 文本不显示。

标签: php session post


【解决方案1】:

您是否尝试过改用$_SESSION['name'] = $_POST['name'];

在我使用 PHP 编程的整个过程中,我从未使用过 $_SESSION = $_POST;,也从未见过它。

希望这会有所帮助。

【讨论】:

  • 谢谢,好主意。但如果我使用$_SESSION = $_POST;$_SESSION['name'] = $_POST['name']; 没有区别 :(.
  • $_SESSION = $_POST; 工作正常。但是当前会话随后会被覆盖。
  • 太棒了 :) 如果您有身份验证,请不要忘记验证 $_POST 变量,因为 ic 可用于入侵您的网站。
  • 同意@peteroak,一一分配,更容易对每个var进行具体的验证。
【解决方案2】:

我会改为foreach $_POST 并将其添加到$_SESSION['mypostvars']。请记住,您应该在存储之前验证并验证 $_POST。

这可能与PHP merge $_POST into $_SESSION 重复

【讨论】:

  • 是的,我最终使用了foreach。如果我只使用$_SESSION = $_POST;,当前会话将被覆盖。
【解决方案3】:

使用 Xampp,该示例运行良好。 'test1' 打印在成功发布之前和之后。使用 PHP 5.3.8。

在 Linux 上使用 PHP 5.3.6 进行测试,在两种情况下都可以正常打印“test1”。

所以,PHP 似乎不是这里的问题。

【讨论】:

【解决方案4】:

您可以修改 $_SESSION,但我认为您不能像那样重新分配它。相反,将 $_POST 的成员复制到其中。尝试使用 array_merge() 但如果这不起作用,则编写一个 foreach 循环来执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多