PHP会话Var不存储...可能的php.ini问题?

时间:2010-12-15 15:24:23

标签: session forms php

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

PAGE 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文件的东西,因为我有一个单独的表单,具有相同的设置,我从来没有碰过它,现在它在我最后一次检查时不起作用。

更新

我刚刚尝试过这个表单,我故意错误地提交了表单以触发验证,并且它已经发回了我已经提到的空白输入。我点击了另一个页面,然后回到表单并显示输入。好像它的存储似乎没有被立即读取?不知道这是否有帮助。

5 个答案:

答案 0 :(得分:2)

在页面B上session_start()应该是页面上的第一个命令。为了确保

,我始终把它保持在最顶端

答案 1 :(得分:0)

不确定它是否是拼写错误,但是在输入标记中没有指定“name”属性,这意味着当你转到第B页时会出现一个空的$ _POST数组。

答案 2 :(得分:0)

很难(至少对我来说)没有进一步细节的帮助,但这是我的想法:

  1. 从PHP手册:“即使启用了session.use_trans_sid,也不会使用Location标头传递会话ID。必须使用SID常量手动传递它。”
  2. 在其他论坛中找到一个解决方案:在标题重定向之前调用session_write_close():external link
  3. 显然,header()有时可以在写入会话cookie之前进行重定向。这可以解释为什么有时它会起作用,有时却不起作用。但是,正如我所说,不确定这是否适用于您的代码。

答案 3 :(得分:0)

您根本不需要SESSION ...

PAGE 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;
?>

答案 4 :(得分:0)

我通过填写你在你的例子中遗漏的东西来完成它;它对你有用吗?

PageA.php

请注意添加<form action="PageB.php" method="POST">并将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');
?>