主要是在一些使用到cookie的ajax场景中。
比如:Angularjs的$http({"url":url,"method":"GET",withCredentials":true}).success(function(){})
get请求无法得到正确数据的时候,先查看控制台。
如果该请求 from cache 或 来自缓存
你会发现该get请求的请求头为空。
这时就会向服务器发送空请求,导致服务器得不到你的cookie,从而无法根据cookie返回所需信息。
解决方法如下:
1.在链接后面加随机的索引字符串,比如时间戳什么的。写过验证码的都知道这个坑。
以angular为例:
// 时间戳 $http({ url: myConstant.sqlUrl + "/uid" + "?time=" + (+new Date()), method: "GET", withCredentials: true, // 允许携带Cookie headers: { "If-Modified-Since": 0 } // 避免get请求缓存 }).success(function (data) { $scope.userInfo = data.data; }); // 随机数 $http({ url: myConstant.sqlUrl + "/uid" + "?time=" + Math.random(), method: "GET", withCredentials: true, // 允许携带Cookie headers: { "If-Modified-Since": 0 } // 避免get请求缓存 }).success(function (data) { $scope.userInfo = data.data; });
2.直接在header里写上禁止缓存:{"If-Modified-Since":0}
以angular为例:
$http({ url: myConstant.sqlUrl + "/uid", method: "GET", withCredentials: true, // 允许携带Cookie headers: { "If-Modified-Since": 0 } // 避免get请求缓存 }).success(function (data) { $scope.userInfo = data.data; });
3.使用php的header函数
header(‘Cache-Control:no-cache, must-revalidate‘);
时间: 2024-12-11 20:13:02