【问题标题】:Save $_POST to $_SESSION将 $_POST 保存到 $_SESSION
【发布时间】:2014-02-07 16:15:01
【问题描述】:

我需要将完整的$_POST 保存到$_SESSION,然后将其保存到$_POST,我找到了代码:

// 1.save
$_SESSION['POST'] = $_POST;

// 2.ERROR HERE - its return empty array
var_dump($_SESSION['POST']);

// 3.reload page

// 4.back all data to $_POST
$_POST = $_SESSION['POST'];

当然在文件顶部我有session_start();我在我的文件中使用工作 $_SESSION 变量没有任何问题。

感谢您的帮助。

【问题讨论】:

  • 可能你的 $_POST 是空的。

标签: php session post


【解决方案1】:

如果您想将所有$_POST 存储到$_SESSION 中,请采用以下方法;

$_SESSION['POST'] = serialize($_POST); #Copy _POST to _SESSION
$_POST = unserialize($_SESSION['POST']); #Copy it back.
  • 此外,您可以采用json_encode 并进行相应的解码。

另外,adopt what helion3 said 并在将 _POST 分配给 _SESSION 之前检查它是否确实具有键/值

这是一个快速演示。

我有一个包含以下数据的 _POST,

Array ( 
 [name] => Frank 
 [animal] => Penguin 
)

然后我使用上面的脚本将其复制到_SESSION 中生成值;

1a:2:{s:4:"name";s:5:"Frank";s:6:"animal";s:7:"Penguin";}

然后我把它复制回_POST,变成原来的样子

Array ( 
 [name] => Frank 
 [animal] => Penguin 
)

这是一个演示脚本。

<?php

session_start();

$_POST = array();
$_POST['name'] = "Frank";
$_POST['animal'] = "Penguin";

$_SESSION['POST'] = serialize($_POST);
print_r($_SESSION['POST']);

unset($_POST); # _POST has been destroyed

//Now rebuild _POST
$_POST = unserialize($_SESSION['POST']);
print_r($_POST);

【讨论】:

  • 当会话支持数组/对象时,为什么要将 POST 存储为序列化字符串?
【解决方案2】:

在我们看到更多代码之前,我假设您没有检查$_POST 是否包含数据。如果它是空的(除非有实际的 POST 数据,否则始终是空的),它将重置每个请求的 $_SESSION。

检查$_POST不为空(有多种方式):

if( !empty($_POST) )if( count($_POST) )

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 2012-01-24
    • 2015-11-20
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多