.NetCore Session.Redis

首先创建ASP.NET CORE Web项目,然后按如下顺序操作。
1.添加nuget程序包:

            Microsoft.AspNetCore.Session;
            Microsoft.AspNetCore.DataProtection.Redis;
            Microsoft.Extensions.Caching.Redis.Core;
            Microsoft.Extensions.Caching.Redis
            Microsoft.AspNetCore.Http;     //使用Session时有扩展方法

2.在appsettings.json中添加Redis配置:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "WebConfig": {
    "Redis": {
      "Connection": "127.0.0.1:6379,defaultdatabase=1",
      //"Connection": "127.0.0.1:6379,allowAdmin=true,password=123456,defaultdatabase=5",
      "InstanceName": "Core_Redis_Session_"
    },
    "SessionTimeOut": "30" //session过期时长,分钟
  },
  "AllowedHosts": "*"
}

  3.在startup.cs类中,按如下例子添加代码:

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

         /*
          *  Microsoft.AspNetCore.Session;
          *  Microsoft.AspNetCore.DataProtection.Redis;
          *  Microsoft.Extensions.Caching.Redis.Core;
          *  Microsoft.Extensions.Caching.Redis
          *  Microsoft.AspNetCore.Http;     //使用Session时有扩展方法
          */

            #region 使用Redis保存Session
            var redisConn = Configuration["WebConfig:Redis:Connection"];
            var redisInstanceName = Configuration["WebConfig:Redis:InstanceName"];
            //Session 过期时长分钟
            var sessionOutTime = Configuration.GetValue<int>("WebConfig:SessionTimeOut", 30);

            //var redis = StackExchange.Redis.ConnectionMultiplexer.Connect(redisConn);
            //services.AddDataProtection().PersistKeysToRedis(redis, "DataProtection-Test-Keys");
            services.AddDistributedRedisCache(option =>
                {
                    //redis 连接字符串
                    option.Configuration = redisConn;
                    //redis 实例名
                    option.InstanceName = redisInstanceName;
                }
            );
            #endregion

            //添加Session并设置过期时长
            services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(sessionOutTime); });


        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseSession();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

4.在控制器HomeController中添加:

public class HomeController : Controller
    {
        public IActionResult Index()
        {
            ViewData["UserName"] = this.HttpContext.Session.GetString("UserName");
            ViewData["PassWord"] = this.HttpContext.Session.GetString("PassWord");
            return View();
        }


        [HttpPost]
        public NoContentResult Add(string userName,string pwd)
        {
            this.HttpContext.Session.SetString("UserName", userName);

            this.HttpContext.Session.SetString("PassWord", pwd);

            return NoContent();
        }

 

5.在View/Index.cshtml添加如下代码:

<form method="post" action="../Home/Add">
    <div>
        <input name="username" id="username" type="text" value="@ViewData["UserName"]" />
        <input name="pwd" id="pwd" type="password" value="" />
        <input type="submit" value="更新" />
        <h1>提交用户名称为:@ViewData["UserName"]    密码:@ViewData["PassWord"]</h1>
        <a href="javascript:void(0);" onclick="window.location.reload();">刷新显示最新值</a>
    </div>
</form>

  

 

源代码下载:https://github.com/842549829/Session.Redis.Web

posted @ 2018-07-03 17:32  刘小吉  阅读(1729)  评论(2编辑  收藏  举报