2014-03-31 46 views
0

我有一个页面,其中有一个投票表单,用户在表单中投票并在提交时会调用一个ajax请求在表单上显示结果。表格上的Firefox会话/ cookie处理

投票后,将创建一个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; 



} 

回答

0

有趣的是,据我所知 - 只要你创建它,你就可以在Firefox中访问cookie,不需要刷新。你如何创建和读取cookie? 看到这里您可以创建和读取Cookie将极大地帮助你的代码;)

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

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*/ 
} 
0

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