2

我正在建立一个网站,在某些时候人们可以投票赞成或反对,他们每天只能这样做一次。我在网上找到了一个脚本,它只允许用户投票一次,它有一个重置 cookie 的按钮,以便用户可以再次投票。我希望投票,按钮的功能,在午夜后重置。这是html中的按钮激活的javascript代码。这是关于 .ld-btn-reset 的部分,它进行重置,所以我希望该部分在午夜被激活。

    run : function()
{
    var s = '';
    s += "<div class='ld-bar-like'></div>";
    s += "<div class='ld-bar-dislike'></div>";
    s += "<div class='ld-clear-both'></div>";
    $( this.domobj ).find( '.ld-stats-bar' ).html( s );

    var _this = this;

    $( this.domobj ).find( '.ld-btn-like' ).click( function(e){
        e.preventDefault();
        _this.vote( $(this), 'likes' );
    });

    $( this.domobj ).find( '.ld-btn-dislike' ).click( function(e){
        e.preventDefault();
        _this.vote( $(this), 'dislikes' );
    });


    $( this.domobj ).find( '.ld-btn-reset' ).click( function(e){
        e.preventDefault();
        var key = _this.getCookieName();
        Cookie.del( key );
        alert( 'Cookie has been reset!' );
    });

    this.send( '' );
},
4

1 回答 1

3

如果您不关心人们通过清除 cookie 来“欺骗系统”,那么您应该在设置时控制 cookie 的到期日期,而不是尝试重置它。

var currentDate = new Date();
var expirationDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()+1, 0, 0, 0);
$.cookie("vote", "5", {expires: expirationDate});

这将采用当天,添加 1 天,并将日期设置为 0:00

要在下面的评论中引用您的示例代码,您将使用以下内容:

var currentDate = new Date();
var expirationDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()+1, 0, 0, 0);
var expires = "; expires=" + expirationDate.toGMTString(); 
document.cookie = name + "=" + value + expires + "; path=/";

为了更详细地解释处理流程:

  1. 我们将“currentDate”设置为当前时间和日期
  2. 我们通过从当前年、月和日构建日期来设置新的到期日期,然后我们将其加 1(使其成为明天早上的午夜)
  3. 我们将 "expires" 字符串设置为 "; expires=",然后将过期日期转换为 GMT 日期字符串
  4. 然后您设置您的 cookie 名称、值和新的到期时间

您的旧代码基本上是在当前日期和时间上增加 24 小时

于 2013-05-17T15:11:09.537 回答