【问题标题】:Make ASP.NET_SessionId cookie not httpOnly使 ASP.NET_SessionId cookie 不是 httpOnly
【发布时间】:2015-02-13 07:40:14
【问题描述】:

在 ASP.NET MVC 中用于会话的 cookie 是 httpOnly(属性设置为 true)。

有没有办法让它不是httpOnly?

我希望能够从 javascript 访问此 cookie。

即使它不如“如果整个宇宙都反对我怎么办?!”默认设置。

【问题讨论】:

  • cookie 是在哪里创建的?是自己创建的,还是由 ASP.NET 生成的?
  • 全部由 MVC.Net 处理。
  • 问题变成了为什么需要这样做?你背后的逻辑是什么?出于安全原因,默认情况下它为 httpOnly 设置为 true。
  • 用于培训目的 - 演示为什么会话 cookie 应该始终是 httponly

标签: c# asp.net-mvc cookies


【解决方案1】:

如果您真的需要它,您可以尝试将其添加到您的 Global.asax:

void Application_EndRequest(Object sender, EventArgs e)
{
   if (Response.Cookies.Count > 0)
   {
       foreach (string s in Response.Cookies.AllKeys)
       {
           if (s == "ASP.NET_SessionId")
           {
               Response.Cookies["ASP.NET_SessionId"].HttpOnly = false;
           }
       }
   }    
}

解决方案取自here

【讨论】:

  • 注意:要测试这个,一定不要忘记事先从浏览器中删除cookie。 (Response.Cookies 仅指新添加的cookies)
【解决方案2】:

我构建了一个系统,该系统使用 cookie 来存储整个站点的搜索参数。 在主页上有链接,我想使用 jQuery 保存一个带有项目 ID 的 cookie。

但点击后,用户会被发送到高级搜索页面,他们可以在其中使用 .net 控件来修改搜索。 cookie 被再次保存,但需要在用户回浏览时被主页上的 js 可写。

所以我这样设置HttpOnly:

var cookie = new HttpCookie(name)
{
   Value = val,
   HttpOnly = false // #DEV search cookies can be modified by JS
};
HttpContext.Current.Response.Cookies.Add(cookie);

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2017-06-20
    相关资源
    最近更新 更多