zoukankan      html  css  js  c++  java
  • ASP.NET Forms验证

            /// <summary>
            /// 执行用户登录操作
            /// </summary>
            /// <param name="config">授权配置信息</param>
            /// <param name="userData">与登录名相关的用户信息</param>
            /// <param name="expiration">登录Cookie的过期时间,单位:分钟,默认120分钟。</param>
            public static void SignIn(IovAuthConfig config, UserInfo userData, int expiration = 120)
            {
                if (config == null)
                    throw new ArgumentNullException("config");
                if (userData == null)
                    throw new ArgumentNullException("userData");
                if(string.IsNullOrWhiteSpace(config.AppID))
                    throw new ArgumentNullException("AppID");
                // 1. 把需要保存的用户数据转成一个字符串。
                string data = null;
                if (userData != null)
                    data = JsonHelper.Serialize(userData);
    
    
                // 2. 创建一个FormsAuthenticationTicket,它包含登录名以及额外的用户数据。
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                    2, userData.LoginID, DateTime.Now, DateTime.Now.AddDays(1), true, data);
    
    
                // 3. 加密Ticket,变成一个加密的字符串。
                string cookieValue = FormsAuthentication.Encrypt(ticket);
    
    
                // 4. 根据加密结果创建登录Cookie
                HttpCookie cookie = new HttpCookie(config.AppID, cookieValue);
                cookie.HttpOnly = true;
                cookie.Secure = FormsAuthentication.RequireSSL;
                cookie.Domain = FormsAuthentication.CookieDomain;
                cookie.Path = FormsAuthentication.FormsCookiePath;
                //if (expiration > 0)
                //默认过期时间:120分钟
                cookie.Expires = DateTime.Now.AddMinutes(expiration == 0 ? 120 : expiration);
    
                HttpContext context = HttpContext.Current;
                if (context == null)
                    throw new InvalidOperationException();
    
                // 5. 写登录Cookie
                context.Response.Cookies.Remove(cookie.Name);
                context.Response.Cookies.Add(cookie);
            }
    

      web.config同时需要修改两个地方,如下:

      <system.web>
         <authentication mode="Forms">
          <forms name="IOV.Test" loginUrl="/" protection="All" timeout="43200" path="/" domain="" requireSSL="false" slidingExpiration="true" />
        </authentication>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
    

      

      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"></modules>
      </system.webServer>
    

      获取已登录用户信息:

            /// <summary>
            /// 获取当前用户信息
            /// </summary>
            /// <param name="context">当前Http请求上下文</param>
            /// <returns></returns>
            public static UserInfo TryGetUserInfo(HttpContext context)
            {
                if (context == null)
                    throw new ArgumentNullException("context");
    
                // 1. 读登录Cookie
                HttpCookie cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
                if (cookie == null || string.IsNullOrEmpty(cookie.Value))
                    return null;
    
                try
                {
                    UserInfo userData = null;
                    // 2. 解密Cookie值,获取FormsAuthenticationTicket对象
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
    
                    if (ticket != null && string.IsNullOrEmpty(ticket.UserData) == false)
                        // 3. 还原用户数据
                        userData = JsonHelper.Desrialize<UserInfo>(ticket.UserData);
    
                    return userData;
                }
                catch { /* 有异常也不要抛出,防止攻击者试探。 */ }
                return null;
            }
    

      

  • 相关阅读:
    JVM源码分析 规格严格
    Smack 规格严格
    Java动态编译 规格严格
    RPM仓库地址 规格严格
    使用控制台程序测试DLL依赖
    TestNG 使用入门
    白羊座二:星星的一周
    路遇两骗子
    《落地,请开手机》里面最经典的一句台词
    今天明白的一个道理
  • 原文地址:https://www.cnblogs.com/fjzhang/p/10239905.html
Copyright © 2011-2022 走看看