【问题标题】:Setting cookie whilst form information is processed在处理表单信息时设置 cookie
【发布时间】:2014-10-15 23:43:05
【问题描述】:

我试图找出为什么我的 cookie 没有被设置。我试图将它设置在处理表单信息的同一文件中。这是我的设置:

  1. 页面包含表单
  2. 提交后,所有信息都会发送到:form action="../../_includes/achieve-more-form-handler.php"
  3. 在这个表单处理程序中是设置 cookie 脚本
  4. 然后用户被提交回同一页面(因为,如果设置了 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 变量。

标签: php forms cookies


【解决方案1】:

正在设置您的 cookie,但其路径设置为 /_includes/ 目录。这意味着您的表单页面无权读取 cookie。

Name    achieve-more-cookie
Value   test
Host    dev.performancepartnership.com
* Path  /_includes/
Expires Thu, 16 Oct 2014 01:38:29 GMT
Secure  No
HttpOnly    No

http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path。可以使用 setcookie() (http://php.net/manual/en/function.setcookie.php) 配置单独的路径。

setcookie('achieve-more-cookie','cookievalue',time()+60,'/');

【讨论】:

  • 啊,我明白你的意思了,是的,在我更新到你建议的输入的那一刻,我就工作了,谢谢!
  • @JordanC26 很高兴我能帮上忙。
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 2014-08-28
  • 2019-12-21
  • 2011-02-13
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多