需为Cookie设置HTTP Only Flag,web.config无效求代码修改方案
嘿,我明白你的处境——配置了web.config里的<httpCookies>节点却没效果,又没法启用SSL,只能从代码层面下手。结合你贴的Page_Load片段(用到了Session["New"]),大概率是Session Cookie或者自定义Cookie的HttpOnly属性没被正确设置,毕竟默认配置有时候会被代码逻辑覆盖,或者Session的Cookie需要额外处理。
下面给你几个针对性的代码修改方案:
1. 强制Session Cookie设为HttpOnly
如果你的问题和Session相关(比如依赖Session["New"]的场景),可以在Global.asax的Session_Start事件里手动修正Session Cookie的属性:
protected void Session_Start(object sender, EventArgs e) { // 获取当前Session对应的Cookie对象 HttpCookie sessionCookie = Response.Cookies[Session.SessionID]; if (sessionCookie != null) { // 强制开启HttpOnly,覆盖可能的默认配置 sessionCookie.HttpOnly = true; // 因为你没法启用SSL,所以Secure属性就不用开了 // sessionCookie.Secure = true; // 重新把Cookie写回响应 Response.Cookies.Set(sessionCookie); } }
2. 手动创建Cookie时显式设置HttpOnly
如果你的Page_Load里有自定义Cookie的逻辑(比如基于Session["New"]生成用户Cookie),一定要在创建Cookie时显式指定HttpOnly为true,别依赖配置:
protected void Page_Load(object sender, EventArgs e) { if (Session["New"] != null) { // 示例:创建自定义用户信息Cookie HttpCookie userCookie = new HttpCookie("UserSession"); userCookie.Value = Session["New"].ToString(); // *关键:必须手动设置HttpOnly* userCookie.HttpOnly = true; // 可选:设置Cookie过期时间 userCookie.Expires = DateTime.Now.AddHours(2); Response.Cookies.Add(userCookie); } }
3. 排查是否有代码覆盖了HttpOnly设置
最后别忘了检查项目里有没有其他地方(比如自定义HttpModule、Action过滤器)把Cookie的HttpOnly改成了false——全局搜一下HttpOnly = false,说不定能找到问题根源。
验证方式
改完之后用浏览器F12打开开发者工具,切换到Application(Chrome)或存储(Firefox)标签,找到Cookie列表,看看目标Cookie的HttpOnly标记是不是已经勾选上了。
内容的提问来源于stack exchange,提问作者Lemdor
相关产品推荐
相关产品推荐

