• .Net Core 使用 redis 存储 session


    参考一:https://www.cnblogs.com/vipyoumay/p/7771237.html

    参考二:https://www.cnblogs.com/stulzq/p/7729105.html

    背景:原本使用cookie存储登录信息,使用nginx的ip_hash勉强解决多服务器问题,但是现在为了上k8s,因此使用docker,所以ip_hash没了,所以cooker方式pass掉了

    过程:经过一系列baidu操作,最终觉得尝试使用 Redis 来存储 Session,以解决以上问题

    总体分为两个步骤

    一、存储登录信息到redis

    1、添加 Microsoft.Extensions.Caching.Redis

    2、在Startup.cs中添加配置

    //添加redis配置
                services.AddDistributedRedisCache(option =>
                {
                    //redis 连接字符串
                    option.Configuration = address;
                    //redis 实例名
                    option.InstanceName = Configuration["InstanceName"];
                });
                //添加session配置
                services.AddSession(options =>
                {
                    //session存活时间
                    options.IdleTimeout = TimeSpan.FromHours(Convert.ToDouble(Configuration["SessionTimeOut"]));
                    //设为httponly
                    options.Cookie.HttpOnly = true;
                });
    //启用session
    app.UseSession();

    3、使用用session

    //
    HttpContext.Session.SetString("UserId", user.UserId);
    //
    string UserId = HttpContext.Session.GetString("UserId")
    //清除()
    HttpContext.Session.Clear();

    二、存储sessionid到redis

     1、添加 ServiceStack.Redis.Core

     2、添加配置

    //添加数据保护(把sessionid存储到redis)
                services.AddDataProtection()
                    .SetApplicationName("session_redis_application_name")
                    .PersistKeysToStackExchangeRedis(Helper.getSessionConfig("address"), "DataProtection-Keys");
    /// <summary>
            /// 获取session配置
            /// </summary>
            /// <param name="address"></param>
            /// <returns></returns>
            public static StackExchange.Redis.ConnectionMultiplexer getSessionConfig(string address)
            {
                var redis = StackExchange.Redis.ConnectionMultiplexer.Connect(address);
                return redis;
            }

    注意:这里有一个坑,ConnectionMultiplexer需要引用的命名空间有冲突,网上有说改名字能解决,但是我尝试失败了,也许是我的方式不对

    我的项目是多层项目,所以我就把【获取session配置】放到Commin类库中,就解决了这个冲突

    亲测有效

  • 相关阅读:
    Django
    索引
    idea启动tomcat后控制台日志显示中文乱码问题
    Elasticsearch
    Hive 开窗函数
    hadoop-3.1.1集群搭建
    hadoop-2.6.5集群搭建
    spark集群搭建(spark版本2.3.2)
    Zookeeper
    spark-submit(spark版本2.3.2)
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/14621059.html
Copyright © 2020-2023  润新知