【问题标题】:Cookie not being set but database is changedCookie 未设置但数据库已更改
【发布时间】:2012-11-22 01:02:28
【问题描述】:

我正在使用 jQuery 让用户对文章进行向上/向下投票。当用户投票时,设置了一个 cookie,因此用户只能为一篇文章投票一次(不刷新 cookie)。这工作正常,除非用户投票并在投票后立即刷新页面:

jQuery:

$.post('vote.php',{id:id,field:field},function(){
// change button graphics
});

PHP:

setcookie(User::$cookieStart . User::$db_fields[$field_index], 
        $cookie . ':' . $id, time()+60*60*24*30,'/'); 
// This calls a function that effects the db
User::actionArticleTable($id,$field_index,1);

当用户刷新时,cookie设置,但 mysql-info 已更改,即使 db 代码在 cookie 代码之后。

【问题讨论】:

  • 如果我删除 cookie 会怎样?我仍然可以多次投票。我建议您为数据库中的每个用户保存投票。

标签: php jquery database cookies


【解决方案1】:

Cookie 只是 HTML 页面中的标题项,因此在加载 vote.php 页面之前,cookie 不会发生任何变化。如果用户在 vote.php 页面返回之前刷新主页,则没有设置 cookie。下次用户访问此页面时,cookie 很好,但如果您想立即阻止投票,请考虑通过 javascript 设置 cookie。

function setCookie(c_name,value,exdays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
}

【讨论】:

  • 感谢您的快速回复。我正在处理你所说的。在该操作完成之前,用户不能再次对该 ID 进行投票。你建议我有两个 jQuery 函数,首先更改 cookie,然后完成,然后执行 db-action?
  • 我认为如果你在js中设置cookie它会立即可用
  • 是的,我会调查的。感谢您的帮助。
猜你喜欢
  • 2016-12-09
  • 2021-12-25
  • 2014-04-27
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多