案例现象:页面上有一个按钮事件,需要判断当前用户是否登录,未登录就跳转登录页进行登录操作。但登陆后再次点击该按钮仍然叫我登录,换成Chrome却正常的,百思不得其解?
function isLogin() {
$.ajax({
url : path + "/user/isLogin.do",
success : function(result) {
if (result.status) {
window.location = "/user/login.do"
}else{
//dosomething
}
}});
}
经过IE F12 调试工具发现,在请求/user/isLogin.do的时候,发现浏览器没有携带cookie,大家知道java服务端保存session后,会将jsessionid写入cookie中,服务端拿不到jsessionid的值当然就是未登录。于是将问题转向了cookie。然后增加一个参数进行调试
xhrFields:{
withCredentials:true
}
其实这个字段是跨域用的,指跨域是否携带cookie,我的项目并非跨域,抱着试一试的心态调试而已。结果还是未解决!通过继续调试发现其他的ajax请求都携带了cookie的,为什么就只有这个不携带?因此查询了ajax的其他参数,发现了cache
function isLogin() {
$.ajax({
url : path + "/user/isLogin.do",
cache:false,
success : function(result) {
if (result.status) {
window.location = "/user/login.do"
}else{
//dosomething
}
}});
}
cache这个字段默认值为true,当请求参数无变化时,浏览器会直接从缓存中拿数据。是否从缓存中拿数据,其实要看浏览器的设置,不然Chrome为什么是正常的呢!下图就是IE的设置