【发布时间】:2014-10-15 23:43:05
【问题描述】:
我试图找出为什么我的 cookie 没有被设置。我试图将它设置在处理表单信息的同一文件中。这是我的设置:
- 页面包含表单
- 提交后,所有信息都会发送到:form action="../../_includes/achieve-more-form-handler.php"
- 在这个表单处理程序中是设置 cookie 脚本
- 然后用户被提交回同一页面(因为,如果设置了 cookie,页面将会改变。)
现在,我发现它没有特别设置的方式是,如果您在存储 cookie 时返回该表单,则该表单不应出现在第 1 步。但很简单,没有存储 cookie。
每次填写表格时我都会收到一封电子邮件,并且到目前为止我每次测试时都收到了电子邮件,因此有关表格信息的所有信息都在按应有的方式处理。
用户页面
<?php
if (isset($_COOKIE['achieve-more-cookie'])) {
include(DOCUMENT_ROOT.'_includes/collapse-content.php');
} else { ?>
<div id="step1">
<div id="step1-formcontainer" class="ppc-forms">
<h3>Example Heading #1</h3>
<form action="../../_includes/achieve-more-form-handler.php" method="POST">
<label>Name:</label>
<input type="text" name="name" id="name"<?php echo(isset($name)?' value="'.$name.'"':''); ?> required /><br />
<label>Email:</label>
<input type="email" name="email" id="email"<?php echo(isset($email)?' value="'.$email.'"':''); ?> required /><br />
<input type="submit" name="submit" value="Submit" />
</form>
</div>
</div>
<?php } ?>
表单处理程序
<?php
if(!empty($_POST)) {
//set cookie
$time = time() + 60;
setcookie('achieve-more-cookie',$time);
$cookie = $_COOKIE['achieve-more-cookie'];
.... the rest of this page is simply the form fields being processed etc.
【问题讨论】:
-
可能正在设置但页面已缓存(尤其是如果您使用的是 IE)。尝试在页面上设置无缓存标头。
-
您的重定向是什么样的?您是否使用 IIS 来为您的 PHP 提供服务?
-
@PeteScott 只是使用:header('Location: http://...')
-
如果您重新导航到表单页面(通过浏览器地址栏,而不是重定向),它会检测到 cookie 吗?另外,我不确定您是否有意这样做:您将 $time 变量设置为 cookie 的值,而不是它的过期时间。
-
Nope 仍然没有检测到 cookie。我删除了重定向,只是让它回显“谢谢”。通过输入地址导航回页面,但仍显示表单,表示未设置 cookie。我还完全删除了关于 cookie 时间/值的 $time 变量。