您的位置:首页 > 数据库 > Redis

ASP.NET Core 使用Redis存储Session

2017-03-30 19:49 901 查看
首先创建ASP.NET CORE Web项目,然后按如下顺序操作。1.添加nuget程序包:
Microsoft.AspNetCore.Session;
Microsoft.AspNetCore.DataProtection.Redis;
Microsoft.Extensions.Caching.Redis.Core;
Microsoft.AspNetCore.Http;     //使用Session时有扩展方法
2.在appsettings.json中添加Redis配置:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"WebConfig": {
"Redis": {
"Connection": "127.0.0.1:6379,allowAdmin=true,password=123456,defaultdatabase=5",
"InstanceName": "Test_Redis_Session_"
},
"SessionTimeOut": "30" //session过期时长,分钟
}
}
3.在startup.cs类中,按如下例子添加代码:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();

#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, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();

app.UseSession();

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}

app.UseStaticFiles();

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>
…………
6.下载Demo

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: