用户登录(二)

/**
本篇文章主要分享内容
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值