加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

如何在Asp.Net会员提供商中处理“记住我”

发布时间:2020-12-16 06:53:36 所属栏目:asp.Net 来源:网络整理
导读:我为ASP.Net网站编写了一个自定义成员资格提供程序. 我使用默认的Forms.Authentication重定向,您只需将true传递给方法,告诉当前用户“记住我”. 我假设这个函数只是将cookie写入包含用户的一些登录凭证的本地机器. ASP.Net在这个cookie中放了什么?是否可以
我为ASP.Net网站编写了一个自定义成员资格提供程序.

我使用默认的Forms.Authentication重定向,您只需将true传递给方法,告诉当前用户“记住我”.

我假设这个函数只是将cookie写入包含用户的一些登录凭证的本地机器.

ASP.Net在这个cookie中放了什么?是否可以知道我的用户名的格式(例如顺序编号),有人可以轻松复制这个cookie,并将其放在自己的机器上,能够以另一个用户身份访问该网站吗?

此外,我需要能够识别拥有cookie的用户的身份验证.由于他们最后一次登录他们的帐户可能已被取消,他们可能需要更改他们的密码等所以我需要截取身份验证的选项,如果一切仍然正常,允许他们继续或将他们重定向到正确的登录页面.

我很乐意为这两点提供指导.我第二次收集我可以在global.asax中放一些东西拦截身份验证?

提前致谢.

解决方法

对我来说,解决方案是区分浏览器会话auth cookie(不要与asp.net会话cookie混淆)和持久性cookie – 设置低到期将创建一个持久cookie,这意味着当浏览器关闭时它会被记住在到期时间内重新开放.以下适用于我:

public void SetAuthenticationCookie(LoginView loginModel)
    {
      if (!loginModel.RememberMe)
      {
        FormsAuthentication.SetAuthCookie(loginModel.Email,false);
        return;
      }
      const int timeout = 2880; // Timeout is in minutes,525600 = 365 days; 1 day = 1440.
      var ticket = new FormsAuthenticationTicket(loginModel.Email,loginModel.RememberMe,timeout);
      //ticket.
      string encrypted = FormsAuthentication.Encrypt(ticket);
      var cookie = new HttpCookie(FormsAuthentication.FormsCookieName,encrypted)
        {
          Expires = System.DateTime.Now.AddMinutes(timeout),HttpOnly = true
        };
      HttpContext.Current.Response.Cookies.Add(cookie);
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读