【问题标题】:set cookies on an another page through ajax通过ajax在另一个页面上设置cookie
【发布时间】:2019-09-14 10:19:02
【问题描述】:

我有 3 个文件...signup.js

$("#signup-form").submit(function(e){
e.preventDefault();
var theForm = new FormData(this);

$.ajax({
    url: "php-includes/signup-parser.php",
    method: "POST",
    data: theForm,
    contentType: false, 
    processData: false,
    success:function(data){
            // Redirecting
            location.href = "account.php";
        }
    }
})

注册解析器.php

        # Cookie creator
        setcookie('id',1,60);

        # Manually set it,if not set
        if (!isset($_COOKIE['id']))
            $_COOKIE['id'] = 1;

最后是主页面 account.php

    # is_a_cookie_set is function that checks if a cookie is set.
    if (!is_a_cookie_set()){
        die("<h1>No cookie set</h1>");
    }

我的目的是在注册解析器上设置一个 cookie,然后重定向到帐户页面,这需要设置一个 cookie。问题是无法在注册解析器中设置 cookie...我一直没有设置 cookie...有什么想法是错误的吗?

【问题讨论】:

  • 实际上,您可能正在设置 cookie,但在重新加载之前,您无法在主页上使用它。 AJAX 不会使 cookie 无处不在。会话也是如此。
  • 那么我如何在其他页面上进行重新加载?
  • 通过在您的注册表单中不使用 AJAX 并添加重定向回 account.php 需要重新加载的不是其他页面,而是 account.php 需要操作。跨度>
  • 在account.php中:if (!isset($_COOKIE["id"])){ die("&lt;h1&gt;No cookie set&lt;/h1&gt;"); }

标签: php ajax cookies


【解决方案1】:

第三个参数错误。您必须这样设置,cookie 将在接下来的 60 分钟内可用。您还需要第四个参数,以使 cookie 在整个域中可用。

 setcookie('id', 1, time() + 60, '/');

【讨论】:

  • 你能展示你的 is_a_cookie_set() 函数吗?对我来说它有效。 if (isset($_COOKIE["id"])) { echo "set"; }
  • function is_a_cookie_set(){ if (count($_COOKIE) &gt; 0){ return true; } else{ return false; } }
  • 您还需要一个参数、路径,然后 cookie 将在整个域中可用。请看一下我修改后的示例并尝试一下。
  • 路径是可选的。过期时间也是如此。只需要两件事 - cookie 名称和 cookie 值。这里真正的问题是使用 AJAX。
  • 你在一个文件夹中有文件,在这个文件夹中有文件:php-includes。您必须包含路径参数才能使 cookie 可用,试一试。
【解决方案2】:

使用该功能实际上没有任何意义。您可以只使用empty(),它会检查它是否已设置以及是否包含一个值。现在,您只是在检查任何类型的 cookie。专注于找出你的 $_COOKIE['id'] 是否包含任何值,不要试图对这样的函数感到好奇。

if(empty($_COOKIE['id']){
  die("No cookie");
}

setcookie 需要两个参数,其余的都是可选的。您的第三个参数不正确,您需要使用time() + (int) int 以秒为单位,并使用 Unix 时间戳。

无论脚本返回什么,AJAX 请求都会返回成功,因此在 AJAX 请求上返回 false 仍被视为成功。只有当脚本执行失败(500 个错误)时,它才会返回错误。因此,无论是否设置了 cookie,您都会被重定向。

也尽量不要使用整数值,在它周围加上引号,或者将它存储在一个变量中。

setcookie('id', '1') ;

$num = 1;
$time = (24 * 60 * 60); // one day
setcookie('id', $num, $time);

如果您仍然遇到问题,我建议您查看一些有关设置 cookie 的文档: https://www.php.net/manual/en/function.setcookie.php https://www.w3schools.com/php/php_cookies.asp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 2016-12-25
    • 1970-01-01
    • 2020-09-06
    • 2012-10-11
    • 2016-06-16
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多