表单上的Firefox会话/ cookie处理

时间:2014-03-31 07:38:19

标签: javascript html ajax dom cookies

我的页面有一个民意调查表单,用户在表单中投票,提交时会调用ajax请求在表单上显示结果。

投票时,将创建一个cookie,标记用户已在投票中投票。因此,下次用户访问页面时,如果找到cookie,将禁止该用户进行投票。

我的问题是在投票后使用firefox并且用户再次点击url(转到url并按回车键)时,用户仍然可以投票。直到用户点击刷新按钮/按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;



}

2 个答案:

答案 0 :(得分:0)

如果你正在使用ajax,那么对于Mozilla,hxrhttprequest对象的实现方式会有所不同。我不确定。只是一个猜测。

答案 1 :(得分:0)

有趣的是,据我所知 - 你可以在创建它时立即访问firefox中的cookie,无需刷新..你如何创建和读取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*/
}