【问题标题】:PHP Sessions Var Not Storing... Possible php.ini issues?PHP Sessions Var Not Storing... 可能的 php.ini 问题?
【发布时间】:2010-12-15 15:24:22
【问题描述】:

我正在尝试使用会话将信息存储在表单上,​​以防验证返回 false,然后用户不必重新填写表单。这就是我的做法:

A页:

<?
session_start();

$Fname = $_SESSION['FirstName'];
?>
<html>
<input type="text" id="First" value="<? if($Fname){echo $Fname;}?>">
</html>

第 B 页:

<?
$Fname = $_POST['First'];

session_start();

$_SESSION['FirstName'] = $Fname;

//validation is not good then
header('Location: PageA.php');
?>

问题是,当发送回页面 A 时,输入中没有显示任何内容,但它会随机显示,或者我会刷新它可能会显示。在大多数情况下,它只是不起作用,当我修改删除一个会话变量并由于其他原因用 cookie 替换它,但决定不走那条路时,它才开始发生。 .我仍然没有看到我可以做些什么来开始导致这个问题。有任何想法吗?我认为它与 php.ini 文件有关,因为我有一个具有相同设置的单独表单,我从未接触过它,现在它在我最后一次检查时无法正常工作。

更新

我刚刚尝试了表单,我故意错误地提交了它以触发验证,正如我已经提到的那样,它给我发回了空白输入。我单击了另一个页面,然后返回表单并出现输入。似乎它的存储但没有立即被读取?不知道这是否有帮助。

【问题讨论】:

  • 旁注:使用

标签: session forms php


【解决方案1】:

在页面 B session_start() 应该是页面上的第一个命令。为了确定,我总是把它放在最前面

【讨论】:

  • 这就是答案。如果没有为该页面设置会话,它将不会将 $_SESSION 与正确的会话相关联。 php.net/manual/en/function.session-start.php
  • 那么我会正确命名 pageB 上的会话吗?因为 pageA 只检索发送到 pageB 的变量
【解决方案2】:

你根本不需要SESSION ...

第 A 页:

<?
  $Fname = isset($_POST['First']) ? $_POST['FirstName'] : '';
?>
<html>
  <form method='post' action='PageB.php'>
    <input type="text" id="First" value="<? if($Fname){echo $Fname;}?>"/>
  </form>
</html>

第 B 页:

<?
//validation is not good then
include 'PageA.php';
exit;
?>

【讨论】:

  • 这实际上是一个更好的解决方案。它几乎可以保证输入信息不会丢失。没想到这个,谢谢!
【解决方案3】:

不确定是否是拼写错误,但在您的输入标签中您没有指定“名称”属性,这意味着当您转到页面 B 时是一个空的 $_POST 数组。

【讨论】:

  • 对不起,是的,这是一个错字。我刚刚写了这篇非常快的文章来显示设置,但在我的表单上它同时具有 id 和 name 属性。
【解决方案4】:

如果没有更多细节,很难(至少对我来说)帮助你,但这是我的想法:

  1. 来自 PHP 手册:“即使启用了 session.use_trans_sid,会话 ID 也不会与 Location 标头一起传递。它必须使用 SID 常量手动传递。”
  2. 在其他论坛找到的一个解决方案:在标头重定向之前调用 session_write_close():external link

显然,header() 有时可以在写入会话 cookie 之前进行重定向。这可以解释为什么有时它会起作用,而有时却不起作用。但是,正如我所说,不确定这是否适用于您的代码。

【讨论】:

  • 谢谢,我实现了这个,它仍然不能正常工作,但无论如何这样做是个好习惯。
【解决方案5】:

我通过填写您在示例中遗漏的内容使其工作;对你有用吗?

PageA.php

注意添加&lt;form action="PageB.php" method="POST"&gt;并将id="First"更改为name="First"

<?
session_start();

$Fname = $_SESSION['FirstName'];
?>
<html>
<form action="PageB.php" method="POST">
<input type="text" name="First" value="<? if($Fname){echo $Fname;}?>">
</form>
</html>

PageB.php

(不变)

<?
$Fname = $_POST['First'];

session_start();

$_SESSION['FirstName'] = $Fname;

//validation is not good then
header('Location: PageA.php');
?>

【讨论】:

    猜你喜欢
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多