Php 使用Ajax更改Cookie:奇怪的延迟
我在这里编写了一个相当简单的函数。我使用cookies将用户限制在每天5票以内(这并不完美,事实上很容易找到,但客户坚持认为,没有用户帐户,所以这是下一个最好的选择) 因此,我正在使用Javascript中的Ajax调用动态更改Cookie—每次用户单击“投票”按钮时,Ajax都会与PHP文件对话,从而将Cookie值减少一 但是有一个奇怪的延迟发生了。我已经告诉Ajax将cookie值记录在console.log中(在PHP文件中回响),当记录在日志中时,我得到一个值的延迟。cookie从5开始,因此当我单击“投票”一次时,我应该得到一个console.log“4”,因为该值减少了1,然后被记录。相反,我得到了“5”。下一次,应该是'3',我得到'4',依此类推 我的代码贴在下面。老实说,我不知道该怎么做——我已经从逻辑上仔细考虑了代码,除非我的大脑不工作,否则我看不出为什么这样做不起作用 Ajax调用:Php 使用Ajax更改Cookie:奇怪的延迟,php,jquery,ajax,cookies,Php,Jquery,Ajax,Cookies,我在这里编写了一个相当简单的函数。我使用cookies将用户限制在每天5票以内(这并不完美,事实上很容易找到,但客户坚持认为,没有用户帐户,所以这是下一个最好的选择) 因此,我正在使用Javascript中的Ajax调用动态更改Cookie—每次用户单击“投票”按钮时,Ajax都会与PHP文件对话,从而将Cookie值减少一 但是有一个奇怪的延迟发生了。我已经告诉Ajax将cookie值记录在console.log中(在PHP文件中回响),当记录在日志中时,我得到一个值的延迟。cookie从5开
$.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'];
正如我将在下面链接的帖子所提到的,Cookie Super Global将只显示您请求页面时的值,因此您永远不会看到您刚刚设置的值。查看此帖子了解更多详细信息
正如我将在下面链接的帖子中提到的,Cookie Super Global只会显示您请求页面时的值,因此您永远不会看到您刚刚设置的值。查看此帖子了解更多详细信息
这就是你的
PHP
代码吗?如果还有更多,请添加它。嘿,这是user_vote.PHP中的所有PHP代码。为什么,应该有更多吗?唯一的其他PHP最初是在index.PHP中设置cookie(如果尚未设置)。将其添加到主post.Ugh。这是饼干的一个很弱的问题。我想我可以做两次AJAX调用,一次设置,另一次查询,或者在执行检查时检查值-1。有点脏,但这是一个快速修复和较少的服务器请求。这就是你的PHP
代码吗?如果还有更多,请添加它。嘿,这是user_vote.PHP中的所有PHP代码。为什么,应该有更多吗?唯一的其他PHP最初是在index.PHP中设置cookie(如果尚未设置)。将其添加到主post.Ugh。这是饼干的一个很弱的问题。我想我可以做两次AJAX调用,一次设置,另一次查询,或者在执行检查时检查值-1。有点脏,但这是一个快速修复和较少的服务器请求。如果你的答案基本上是你链接到的帖子中所说的相同,你应该把它标记为重复,而不是只发布链接的答案。好的,谢谢。如果你的答案与你链接到的帖子中所说的基本相同,你应该将其标记为重复,而不是只发布链接答案。好的,谢谢。不仅仅对我来说是链接,但是嘿。
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'), "/");
}