zoukankan      html  css  js  c++  java
  • 关于当前登陆人的确认,Session的运用

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

    拦截器会处理各个接口请求,请求里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

  • 相关阅读:
    httpclient之基本类
    安卓开发遇到的各种问题
    C#获取字符串宽度像素
    Android开发参考资料
    Windows Phone开发参考资料
    Windows Phone锁屏背景相关代码
    Windows Phone Launcher class
    Windows Phone SplashScreen初始屏幕示例
    ASP如何实现注册后发送激活邮件?
    SkyDrive开发申请ClientID
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/10370801.html
Copyright © 2011-2022 走看看