2014-03-31 47 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的實現方式不同。雖然我不確定。只是一個猜測。