javascript脚本无法获取服务端写入的Cookies
看看两段代码吧:
1.
[csharp]
// 在当前请求的输出页面中输出Cookie
HttpCookie cookie = new HttpCookie("ClientId", loginResult.TValue.Info.Code.ToString());
cookie.Expires = DateTime.Now.AddMinutes(20);
this.Response.Cookies.Add(cookie);
2.
[csharp]
HttpCookie cookie = new HttpCookie("ClientId", loginResult.TValue.Info.Code.ToString());
cookie.Expires = DateTime.Now.AddMinutes(ExpiresMinutes);
cookie.HttpOnly = true;
cookie.Path = "/";
HttpContext.Current.Response.Cookies.Add(cookie);
有什么区别没。
执行第2种段代码时,我用IE9自带的网络信息能查到Cookie为ClientId的值,我用js总是取不了Cookie值。
(这两段代码,在后台都能取到Cookie)
顺便提一下:JS取Cookie的代码如下:
[javascript]
function getCookie(objName) {//获取指定名称的cookie的值
debugger;
var arrStr = document.cookie.split("; ");
for (var i = 0; i < arrStr.length; i++) {
var temp = arrStr[i].split("=");
if (temp[0] == objName) return unescape(temp[1]);// url编码了,所以应该解码
}
}
是什么原因呢?
注意,在客户端使用javascript脚本无法获取服务端后台写的Cookies, 很有可能因为此Cookies在服务器端设置了HttpOnly属性为true。
ASP.Net中HttpCookie对象的HttpOnly 属性 指定一个Cookie 是否可通过客户端脚本访问。不能通过客户端脚本访问为 true;否则为 false。默认值为 false。此属性并不能完全阻止客户端在本地获取cookies,但是可以增加通过脚本直接获取的难度。
Microsoft Internet Explorer 版本 6 Service Pack 1 和更高版本支持 Cookie 属性 HttpOnly。
问题就此打住
作者 邓福勇
补充:web前端 , JavaScript ,