去除asp.net 2.0的会话cookie ASP.NET_SessionId 的httponly属性

34 篇文章 1 订阅

http://www.7es.cn/Software_development/remove-aspx-sessionid-httponly.shtml

标题写的很难看,说起来这个问题比较不容易发现。

最近用采集程序在线发布内容到我的一个小站,站用的我用asp.net写的cms后台程序,原来貌似可以正常的实现自动登录自动在线发布,单前端出了问题,一直登录不正常,多方查找原因都不知道为什么。后来偶然机会,想到是不是asp.net的sessionid没有被采集程序正常捕获到,造成登录会话丢失,无法发布。
asp.net页面被访问时,就会给访问者生成一个session,这个会话会一直保留到该访问者离开,甚至可以更久。而访问者则需要每次访问页面时带上这个session的一个id,即写到客户端cookie中的ASP.NET_SessionId,当然这个是默认情况下,通过配置也可以通过url传递sessionid等,此处不论。
从.net 2.0之后,ASP.NET_SessionId 这个cookie被加上了httponly属性,话说httponly,就是让某个cookie值无法通过客户端脚本获取,避免一些安全性的问题,比如跨站攻击等。当然,既然该cookie传递到了客户端,通过一些手段还是能读取到,只是常见的软件,默认是不允许访问该值的,比如ie6 sp1之后版本的浏览器。通过一些http通讯监控程序也能轻松的捕获这个值。
测试表明,正是因为ASP.NET_SessionId这个cookie被赋予了httponly属性,致使采集工具软件没法正确的记录session,从而发布文章到cms时被告知没有登录。因为会话丢失了。
那么,如果去除ASP.NET_SessionId的httponly属性,应该可以解决问题,ASP.NET_SessionId在访问者访问第一个页面文件时,就会产生,那么是否可以再会话产生时修改该值呢。
查找文档得知,可以再应用全局程序文件中,关闭ASP.NET_SessionIdhttponly,具体是给asp.net程序添加全局应用程序类文件Global.asax,编辑该文件代码,在会话生成事件函数Session_Start中加入如下代码

 
  1. protected void Session_Start(object sender, EventArgs e)
  2.  {
  3.        Response.Cookies["ASP.NET_SessionId"].HttpOnly = false;
  4.  }

 这样无论你的访问者先打开那个页面访问你的站点,都会关闭cookie ASP.NET_SessionId的httponly属性了,当然如果你只想在某个文件被访问时处理特殊的会话效果,也可以在某个页面文件的代码中进行同样处理。
关闭httponly之后,那个采集器程序可以正常获取会话id并正常发布了。
不好的就是,这样也会造成一些不必要的安全问题哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core Blazor Server 应用程序可以使用 ASP.NET Core 身份验证中间件来实现基于 Cookie 的登录认证。以下是实现此功能的基本步骤: 1. 在 Startup.cs 文件的 ConfigureServices 方法中添加身份验证服务: ``` services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Login"; options.LogoutPath = "/Logout"; options.Cookie.Name = "MyAppCookie"; options.Cookie.HttpOnly = true; options.Cookie.SameSite = SameSiteMode.Strict; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.SlidingExpiration = true; }); ``` 在上面的代码中,我们使用 AddCookie 方法添加了基于 Cookie 的身份验证方案,并设置了一些选项。其中,LoginPath 和 LogoutPath 分别指定了登录和注销的 URL,Cookie.Name 设置了 Cookie 的名称,Cookie.HttpOnlyCookie.SameSite 分别设置了 Cookie 的安全选项,Cookie.SecurePolicy 设置了 Cookie 的安全协议,SlidingExpiration 启用了滑动过期时间。 2. 在 Configure 方法中启用身份验证中间件: ``` app.UseAuthentication(); ``` 3. 在登录页面或组件中使用 SignInManager 和 UserManager 进行身份验证: ``` var result = await _signInManager.PasswordSignInAsync(username, password, rememberMe, lockoutOnFailure: false); if (result.Succeeded) { return RedirectToPage("/Index"); } else { ModelState.AddModelError(string.Empty, "用户名或密码不正确。"); return Page(); } ``` 在上面的代码中,我们使用 PasswordSignInAsync 方法验证用户的用户名和密码,并在验证通过后重定向到主页。 4. 在需要验证的页面或组件上使用 AuthorizeView 组件: ``` <AuthorizeView> <Authorized> <!-- 显示受保护的内容 --> </Authorized> <NotAuthorized> <p>请先登录。</p> <a href="/Login">登录</a> </NotAuthorized> </AuthorizeView> ``` 在上面的代码中,我们使用 AuthorizeView 组件来判断用户是否已经登录。如果已经登录,就显示受保护的内容;如果没有登录,就显示一个提示信息和登录链接。 以上是在 ASP.NET Core Blazor Server 应用程序中实现基于 Cookie 的登录认证的基本步骤。根据具体需求,还可以使用自定义身份验证方案来进行更复杂的登录认证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值