/**
本篇文章主要分享内容
1. 得到用户上下文
2. 构建简单基类
3. 使用cookie及session存储信息
*/
// UserLogin方法,根据得到的用户名、密码及是否记住密码三个参数完成登录验证并得到用户上下文
/// <summary>
/// 用户登录
/// 创建人:李子玉
/// 日期:2017-07-31 19:43:11
/// </summary>
/// <param name="account">账号</param>
/// <param name="password">密码</param>
/// <param name="isAuto">是否记住自动登录</param>
private string UserLogin(string account,string password,bool isAuto)
{
// 根据账号及密码得到用户信息(不再写验证过程,entity即为得到的用户对象信息)
UserInfo entity;
// 设置用户登录信息(用户上下文信息)
UserContext context = new UserContext();
context.ID = entity.ID;
context.Name = entity.Name;
``````
context.HeadUrl = entity.HeadUrl;
// 将上下文信息存入session
Session["usercontext"] = context;
// 判断是否记住密码
if(isAuto){
// 最好进行加密,因为要存到本地
string autoLoginValue = string.Format("{0}#{1}",account,entity.ID);
// 添加cookie
HttpCookie cookie = new HttpCookie("cookieName",autoLoginValue){Expires = DateTime.Now.AddMonths(1)};
HttpResponse response = HttpContext.Current.Response;
if (response != null)
{
cookie.HttpOnly = true;
response.Cookies.Add(cookie);
}
}
}
// 用户上下文信息类(只作演示)
public class UserContext
{
/// <summary>
/// 主键ID
/// </summary>
public string ID { get; set; }
/// <summary>
/// 账号
/// </summary>
public string Account { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 用户头像
/// </summary>
public string HeadUrl { get; set; }
/// <summary>
/// 是否授权用户(判断用户是否登录)
/// </summary>
public bool IsAuthenticated { get; set; }
``````
}
**
升级
**
/// <summary>
/// 用户登录(升级版)
/// 创建人:李子玉
/// 日期:2017-08-23 15:11:57
/// </summary>
/// <param name="account">账号</param>
/// <param name="password">密码</param>
/// <param name="isAuto">是否记住自动登录</param>
private string UserLogin(string account,string password,bool isAuto)
{
// 根据账号及密码得到用户信息(不再写验证过程,entity即为得到的用户对象信息)
UserInfo entity;
// 设置用户登录信息(用户上下文信息)
UserContext context = SetUserLogin(entity);
// 判断是否记住密码
if(isAuto){
// 最好进行加密,因为要存到本地
string autoLoginValue = string.Format("{0}#{1}",account,entity.ID);
// 添加cookie
HttpCookie cookie = new HttpCookie("cookieName",autoLoginValue){Expires = DateTime.Now.AddMonths(1)};
HttpResponse response = HttpContext.Current.Response;
if (response != null)
{
cookie.HttpOnly = true;
response.Cookies.Add(cookie);
}
}
}
// 设置上下文信息
private static UserContext SetUserLogin(UserInfo entity){
if(entity == null) return null;
UserContext context = new UserContext();
context.ID = entity.ID;
context.Name = entity.Name;
``````
context.IsAuthenticated = true;
context.HeadUrl = entity.HeadUrl;
// 将上下文信息存入session
Session["usercontext"] = context;
return context;
}
// 初始化游客信息
public static UserContext InitGuestUser(){
UserContext context = new UserContext();
context.ID = Guid.NewGuid();
context.Name = "游客";
``````
context.IsAuthenticated = false;
// 将上下文信息存入session
Session["usercontext"] = context;
return context;
}
// 模拟用户进入首页
private void Index(){
UserContext context;
// 检查自动登录
string autoLoginValue= HttpContext.Current.Request.Cookies["cookieName"].Value;
if(!string.IsNullOrEmpty(autoLoginValue)){
// 通过cookie内容获取用户信息 entity
context = SetUserLogin(entity);
this.UserContext = context;
}
// 检查基类中的上下文信息(基类将在以后分享)
if(this.UserContext == null){
// 获取session中存储的context
context = Session["usercontext"];
if(context == null){
if (HttpContext.Current.Session != null){
// 初始化游客信息
context = InitGuestUser();
}
}
}
// 检查是否授权
if(!this.UserContext.IsAuthenticated){
// 跳转登录页面
}
}
原文链接:http://blog.5lzy.com/Blog/Index/ViewEntity?code=WZ000020