【问题标题】:Saving form information with sessions使用会话保存表单信息
【发布时间】:2017-11-05 01:39:55
【问题描述】:

我正在尝试使用会话来保存表单输入,但它仅适用于最后提交的表单。

我有一个 index.php 是这样的:

<?php
   session_start();
   $_SESSION['number-of-sessions'] = 0; ?>
...

然后,有一个指向 form.php 的链接:

 ...
  <form action='display.php' method='post'>
     <input type='text' name='name'/>
     <input type='text' name='id'/>
     <input type='submit' value="Submit"/>
 ...

这里是 display.php:

<?php
    session_start();
    $_SESSION['number-of-sessions']++;
    $_SESSION[$_SESSION['number-of-sessions']] = $_POST;
?>
...
<?php
    for($i = 1; $i <= $_SESSION['number-of-sessions']; $i++) {
        print_r($_SESSION[$i]));
    }
?>
// another link that goes back to form.php

所以基本上,它总是打印最后提交的表单,而其他的只是空白。

有没有其他方法可以做到这一点,或者我做得对吗?

ps:我不能使用数据库。

【问题讨论】:

  • 在您正在测试的浏览器中启用了 Cookie?确保 PHPSESSID 存在于您的 cookie 中,并且它在页面请求之间没有变化(如果是,那么会话中断了)。
  • 是的,cookies 已启用,我的会话 ID 相同。
  • 你永远不会回到index.php 对吗?您只是在提交多个表单的同一会话中在form.phpdisplay.php 之间弹跳?都在会话超时时间内所以不会超时?

标签: php forms session


【解决方案1】:

毫不奇怪,每个会话都有一个新的$_SESSION,因此以这种方式存储任何信息都行不通。

如果你想跨会话持久化数据,你必须将它持久化到某个地方。例如,如果您不能使用数据库,请考虑将其写入文件。

【讨论】:

  • 我在测试中拥有相同的会话 ID,我只是更改了“$_SESSION 索引”,这是错误的吗?抱歉,我听不懂。
  • 我认为他的意思是如果会话超时(用户离开太久,因此开始新会话)。或者,如果有多个用户进来,他们将不会共享会话和会话中的相同数据。它是每个用户、每个会话(通常为 20 分钟)。
猜你喜欢
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 2020-10-05
相关资源
最近更新 更多