【问题标题】:Change Cookie w/ Ajax: Strange Delay [duplicate]使用 Ajax 更改 Cookie:奇怪的延迟 [重复]
【发布时间】:2015-08-25 10:35:05
【问题描述】:

我在这里编写了一个相当简单的函数。我正在使用 cookie 将用户限制为每天五票(并不完美,实际上很容易解决,但客户坚持认为,没有用户帐户,所以这是下一个最佳选择)。

所以,我在 Javascript 中使用 Ajax 调用来动态更改 Cookie - 每次用户单击“投票”按钮时,Ajax 都会与 PHP 文件对话,从而将 cookie 值减一。

但是发生了奇怪的延迟。我已经告诉 Ajax 控制台记录 cookie 值(在 PHP 文件中回显),并且在日志中我得到一个值的延迟。 cookie 从 5 开始,所以当我单击一次“投票”时,我应该得到一个 console.log 为“4”,因为该值减 1 然后记录。相反,我得到'5'。下一次,应该是'3',我得到'4',以此类推。

我的代码发布在下面。老实说,我不知道该怎么做——我已经从逻辑上考虑过代码,除非我的脑袋不工作,否则我看不出为什么这不起作用。

Ajax 调用:

$.ajax({
    type: "GET",
    url: "includes/user_vote.php",
    success: function(data){
        console.log(data);
    },

    error: function(jqXHR, textStatus, errorThrown){
        //log the error if the ajax function fails
        console.log(textStatus);
        console.log(errorThrown);
    },

    complete: function(data){

    }
});

user_vote.php:

if($_COOKIE['votes_left'] <= 0){
    $newVal = 0;
} else {
    $newVal = $_COOKIE['votes_left'] - 1;
}

setcookie('votes_left', $newVal, strtotime('today 23:59'), "/");
echo $_COOKIE['votes_left'];

还有一点 PHP,与此没有直接关系,但无论如何都在这里发布。它在 index.php 上运行以设置 cookie(如果尚未设置)。

if(!isset($_COOKIE['votes_left'])){

    $votes = 5;
    $time = date('h:i:s');

    setcookie('votes_left', $votes, strtotime('today 23:59'), "/");
    setcookie('set_time', $time, strtotime('today 23:59'), "/");

}

【问题讨论】:

  • 全部是你的PHP代码吗?如有更多请补充。
  • 嘿 - 这是 user_vote.php 中的所有 PHP 代码。为什么,应该还有更多?
  • 唯一的另一个 PHP 是在 index.php 中设置 cookie(如果尚未设置)。将其添加到主帖中。
  • 呃。这是 cookie 的一个非常薄弱的​​问题。我想我可以做一个双 AJAX 调用,一次设置,再次查询。
  • 或者您可以在执行检查时检查值 -1。有点脏,但它可以快速修复并且对服务器的请求更少。

标签: php jquery ajax cookies


【解决方案1】:

正如我将在下面链接的帖子中提到的,Cookie Super Global 只会显示您请求页面时的值,因此您永远不会看到您刚刚设置的值。查看这篇文章了解更多详情

PHP cookie has a one refresh delay

【讨论】:

  • 如果您的答案与您链接到的帖子中所说的基本相同,您应该将其标记为重复,而不是发布仅链接的答案。
  • 好的,谢谢。看起来不像只链接到我,但是嘿。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2014-07-31
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多