【问题标题】:Firefox session/cookie handling on forms表单上的 Firefox 会话/cookie 处理
【发布时间】:2014-05-10 11:03:19
【问题描述】:

我的页面有一个投票表单,用户在表单中投票,提交后将调用 ajax 请求以在表单上显示结果。

在投票时,将创建一个 cookie,标记用户已在投票中投票。这样下次用户访问该页面时,如果找到 cookie,该用户的投票将被禁用。

我的问题是在投票后使用 firefox 并且用户再次点击 url(转到 url 并按 enter)时,用户仍然可以投票。直到用户点击刷新按钮/按 F5,用户才会被检测为已投票。

这似乎只发生在 Firefox 上,而不是 Chrome 和 IE。

如果需要,我很乐意提供更多信息。

我创建和获取 cookie 的方法在我的 java 类中。

public static void addCookie (RequestContext context, String key, String value){
        Cookie cookie = new Cookie(key, value);
        cookie.setMaxAge(60 * 60 * 24 * 365);
        context.getResponse().addCookie(cookie);

}

public static String getCookieValue(RequestContext context,
        String cookieName, String defaultValue) {
    String value;
    CookieHash cookies = context.getCookies();
    Cookie cookieValue = cookies.getCookie(cookieName);
    if (cookieValue == null) {
        value = defaultValue;
    } else {
        value = cookieValue.getValue();
    }
    return value;



}

【问题讨论】:

    标签: javascript html ajax dom cookies


    【解决方案1】:

    很有趣,据我所知 - 您可以在创建 cookie 后立即在 Firefox 中访问 c​​ookie,无需刷新。您如何创建和读取 cookie? 查看创建和读取 cookie 的代码会有很大帮助;)

    我个人正在使用这些函数来创建和读取 cookie:

    function createCookie(name,value,days)
    {
    if (days)
    {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else
        var expires = "";
    
    document.cookie = escape(name)+"="+escape(value)+expires+"; path=/";
    }
    
    function readCookie(name)
    {
    var nameEQ = escape(name) + "=";
    var ca = document.cookie.split(';');
    
    for ( var i=0; i < ca.length; i++ )
    {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length,c.length));
    }
    return false;
    }
    

    所以下面的代码对我来说是完美的:

    createCookie('myCookieName', 1, 30);
    var cookieValue = readCookie('myCookieName');
    if(cookieValue == 1)
    {
       /* some action here*/
    }
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 ajax ,则 hxrhttprequest 对象对于 Mozilla 的实现方式不同。不过我不确定。只是一个猜测。

      【讨论】:

        猜你喜欢
        • 2010-10-21
        • 2012-06-28
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        相关资源
        最近更新 更多