PHP $ _SESSION的奇怪问题

时间:2011-05-07 05:14:09

标签: php

我遇到了从第2页到第1页的变量问题。我有一个多部分表单,如果您决定返回页面,我们的想法是能够将您的输入保存在会话变量中1(带有字段的页面。

第1页对第2页有一个POST操作。然后,在第2页中,$ _SESSION变量是从POST变量设置的。请记住, POST变量设置正确,因为我在成功的后面部分称之为

我的问题是:我无法将$ _SESSION变量设置为第2页上的$ _POST变量的值,将其转移到第1页。我可以设置和输出来自第2页上的POST变量的$ _SESSION变量(它不会返回到第1页)。但是,我可以将$ _SESSION var设置为一个字符串,并将其转移到第1页。通常,这将证明POST变量很糟糕,但它们正确地携带了正确的值。

我想做的事情: 将第2页的$ _POST var的值放入$ _SESSION var中,并将其返回到第1页。

我的问题: 会话变量不会从第2页返回到第1页。它们可以携带字符串,但不能携带POST变量。如上所述,POST变量不是问题,因此请不要尝试通过检查POST var validity等进行故障排除。它们输出完美。

我可以在第2页上进行会话转储,并且我需要的所有会话变量都已正确填充。

如果我在此之后返回第1页,则会将有问题的会话变量设置为NULL。请记住,我在该特定页面上有许多其他会话变量。 不是 session_start();问题。

zinger - 我可以将会话变量从第1页传到第2页,没问题。

Page 1 Pastebin

Page 2 Pastebin

2 个答案:

答案 0 :(得分:1)

  

设置了有问题的会话变量   为NULL

  

他们可以携带一根绳子,但不能携带   POST变量

您的代码无意中写了会话变量。你有这个代码完全没问题:

$retailerName = $_POST["retailerName"];
$description = $_POST["description"];
$savingsDetails = $_POST["savingsDetails"];
$terms = $_POST["terms"];
$phone = $_POST["phone"];
$address = $_POST["address"];
$zone = $_POST["zone"];
$dateExp = $_POST["dateExp"];
$tag = $_POST["tag"];

$_SESSION["rn"] = $retailerName;
$_SESSION["de"] = $description;
$_SESSION["sd"] = $savingsDetails;
$_SESSION["tm"] = $terms;
$_SESSION["ph"] = $phone;
$_SESSION["ad"] = $address;
$_SESSION["zo"] = $zone;
$_SESSION["ex"] = $dateExp;
$_SESSION["tg"] = $tag;

现在,如果您通过GET请求打开此页面,会发生什么??您保存在会话中的字符串将继承您在会话中保存的帖子变量,例如通过执行$_SESSION["tg"] = $_POST["tag"]将变为NULL。

现在试试这个 - 在page2中添加一个计数器变量来计算打开此页面的次数:

if(array_key_exists("ViewCount", $_SESSION)==false){
    $_SESSION["ViewCount"] = 0;
}
$_SESSION["ViewCount"]++;
echo $_SESSION["ViewCount"];

告诉我计数器是否意外增加,例如每次POST到该页面时,增量两次而不是一次。还可以使用网络检查器查看您的浏览器是否在POST后向同一页面发出GET请求(FireBug可以帮助您验证;服务器日志将为您提供更深入的了解)。如果是这种情况,那么您的网页中可能会有一个<img>标记src=""

答案 1 :(得分:0)

您可以serialize POST变量并将其放在一个会话变量上。

同样,你可以json_encode POST变量并输入一个会话变量。

两者都返回一个你说可以携带的字符串。

我推荐json_encode:)