/// <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;
}

  

最新文章

  1. x-forward-for详解
  2. C# 版 flvmerge:快速合并多个flv文件
  3. 安装xampp无法设置默认时间的坑
  4. 查看apk包名package和入口activity名称的方法
  5. Cheatsheet: 2015.02.01 ~ 02.28
  6. 进程内核栈、用户栈及 Linux 进程栈和线程栈的区别
  7. IntelliJ IDEA使用之快捷键
  8. Oracle RAC的五大优势及其劣势
  9. HTTP 返回时间 概念 TTFB..
  10. SpringMVC配置+小例子
  11. mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)
  12. More is better(并查集)
  13. wordpress安装五步法
  14. 格式化代码引发的css编译失败
  15. mysql /tmp目录爆满问题的处理
  16. 封装方法公共文件common.js
  17. VBS数组导出到Excel
  18. H5离线缓存技术Application Cache
  19. Java基础教程(16)--注解
  20. R语言数组array函数

热门文章

  1. map的使用注意事项
  2. Reflection 反射
  3. centos7下安装docker(12.3容器之间的连通性)
  4. 数位dp小练
  5. merge-two-sorted-lists (归并排序中的合并)
  6. 一图尽知XMIND
  7. Word2010中如何在斜线表格中添加文字
  8. 提示文件过大无法复制到U盘怎么解决
  9. 【Codeforces 1137C】Museums Tour
  10. timeout可以实现当一个命令在规定时间内不返回就强制返回的功能 + 杀毒安装ClamAV nmap 速度 比Telnet 快