关于当前登陆人的确认,Session的运用

利用Session保存用户信息
本文介绍了一种在程序中通过Session保存用户信息的方法,尤其是在日志处理和权限验证时的应用。通过创建SessionHelper辅助类,可以方便地在拦截器中保存从Token解析出的用户信息,如用户名和用户ID。

在程序的各项操作中,常常需要获取当前登陆人,例如在做日志保存等操作的时候,以下是解决思路

拦截器会处理各个接口请求,请求里token记录着当前用户信息,我们解析后将token存入Session中,确认了当前操作人。当我们在做日志处理的时候,只需要取出session存的用户信息就可以了

以下是对Session的应用,先写个SessionHelper帮助类

public class SessionHelper
    {
        public static HttpContext _httpContext;

        public static ISession _session => _httpContext.Session;

        /// <summary>
        /// session写入
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public static void Set(string key, string value)
        {
            _session.SetString(key, value);
        }

        /// <summary>
        /// session的读取
        /// </summary>
        /// <param name="key"></param>
        public static string Get(string key)
        {
            return _session.GetString(key);
        }
    }

写好帮助类,我们直接在拦截器里运用,保存解析出的用户信息

 public Task Invoke(HttpContext httpContext)

        {
            //检测是否包含'Authorization'请求头,如果不包含则直接放行
            //登陆放行,预加载放行,文件上传放行
            if (httpContext.Request.Path.Value.Equals("/api/Login/Login") || httpContext.Request.Method == "OPTIONS")
            {

                return _next(httpContext);
            }
            else if (httpContext.Request.Headers.ContainsKey("Authorization"))
            {
                var tokenHeader = httpContext.Request.Headers["Authorization"];


                TokenModel tm = JwtHelper.SerializeJWT(tokenHeader);

                SessionHelper.Set("LoginName", tm.LoginName);//存入用户名
                SessionHelper.Set("UserId", tm.Uid);//存入用户ID
              
                return _next(httpContext);
            }
            return null;
        }

这样用户名和id就存入了Session中,我们去调用一下

 

 这个时候请求为空,这是容易忽略的错误,拦截器里面http请求并没有传入SessionHelper,我们少了一个步骤

再运行

还是报错,还忽略了一个步骤,Session需要在startup文件中进行注册

配置好后,我们在控制器里取得了Session,该Session只能在控制器里用,如果换到服务层失效,,如果在其他层使用,需要使用 IHttpContextAccessor

 

 

转载于:https://www.cnblogs.com/wangcongsuibi/p/10370801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值