欢迎光临
个人技术文档整理

.NET Core 使用Redis实现分布式Session

NuGit安装 

Install-Package Microsoft.Extensions.Caching.Redis

在Startup.cs里进行注册 : Redis分布式缓存服务

       public void ConfigureServices(IServiceCollection services)
        {
  
            //注册session服务 
            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromSeconds(3600); //默认 20分钟,会话过期时间  单位秒  3600秒=1小时 (每次会话会重置超时)
                options.Cookie.Name = "Ku.Session";//cookie 自定义名称 默认 .AspNetCore.Session
                //options.Cookie.HttpOnly = true;//Cookie 是否可通过客户端脚本访问 默认true, false的时候 document.cookie 可以获取到cookie
            });

             
            //将Redis分布式缓存服务添加到服务中
            services.AddDistributedRedisCache(options =>
            {
                options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions()
                {
                    Password = "123456",//redis 密码
                    //DefaultDatabase = 6,//默认0,数据库0-15
                    //ConnectTimeout = 5000,//设置建立连接到Redis服务器的超时时间(以毫秒为单位)(默认值5秒)
                    //SyncTimeout = 5000,//设置对Redis服务器进行同步操作的超时时间( 以毫秒为单位)(默认值1秒)
                    //ResponseTimeout = 5000//设置对Redis服务器进行操作的响应超时时间( 以毫秒为单位)(默认为SyncTimeout 1秒)  
                };

                options.ConfigurationOptions.EndPoints.Add("127.0.0.1:6379");//配置redis 服务器
                options.InstanceName = "Ku:Session";//Redis实例名称

            });


        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            
            //启用session的中间件  必须放在 UseEndpoints 之前调用
            app.UseSession();


            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            }); 

        }

在MVC Controller里使用HttpContext.Session

HttpContext.Session.SetString("demo", value);//写入

var value = HttpContext.Session.GetString("demo");//读取

 

跨站点 共享Session 设置

            //分布式 环境下 设置相同的程序识别着
            services.AddDataProtection(options =>
            {
                options.ApplicationDiscriminator = "mysite";
            });

 

赞(2)