我的页面有一个民意调查表单,用户在表单中投票,提交时会调用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;
}
答案 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*/
}