返回首页 | 申博娱乐APP下载

合作共赢、快速高效、优质的网站建设提供商

更多精品源码-尽在织梦模板-www.moke8.com

网站开发[译]ASP.NET Core 2.0 会话状况

时间:2017-10-27 编辑:admin

创立一个空项目,修正Startup类的ConfigureServices()挑选,增加会话状况效劳和它后台的存储效劳:

public void ConfigureServices(IServiceCollection services)
 services.AddDistributedMemoryCache();
 services.AddSession();
}

在Configure()中增加会话中间件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 app.UseSession();
 app.Use(async (context, next) = 
 context.Session.SetString("GreetingMessage", "Hello Session State");
 await next();
 app.Run(async (context) = 
 var message = context.Session.GetString("GreetingMessage");
 await context.Response.WriteAsync($"{message}");
}

运转,此刻页面作用:

我们们能够运用会话状况在同一个浏览器不同HTTP恳求之间同享数据。这个数据是存储在缓存中的,而且能够经过HttpContext.Session特点来拜访。

为了相关不同的HTTP恳求,一个Cookie被存储到浏览器端,它的默许称号是.AspNetCore.Session.

在装备会话状况效劳时,我们们能够设置各种特点:

1.HttpOnly:设置Cookie是否能够经过JavaScript拜访。缺省值是true,也就是说在客户端不能经过脚本拜访。

2.Name:用来掩盖缺省的Cookie称号。

3.SecurePolicy:是否只能经过HTTPS恳求来传输Cookie信息。

4.IdelTimeout:设置会话的过期时刻,每一个后续的恳求都会重置这个时刻。缺省值是20分钟。

public void ConfigureServices(IServiceCollection services)
 services.AddDistributedMemoryCache();
 services.AddSession(options = {
 options.Cookie.HttpOnly = true;
 options.Cookie.Name = ".Sanshi.Session";
 options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
 options.IdleTimeout = TimeSpan.FromMinutes(10);
}

下面我们们对比下,默许的Cookie:

装备Session的Cookie.Name特点之后:

HttpContext.Session没有供给保存杂乱目标的挑选,但是我们们能够经过序列化目标为字符串来完成这个功用:

public static class SessionExtensions
 public static void SetObject T (this ISession session, string key, T value)
 session.SetString(key, JsonConvert.SerializeObject(value));
 public static T GetObject T (this ISession session, string key)
 var value = session.GetString(key);
 return value == null ? default(T) : JsonConvert.DeserializeObject T (value);
}

JsonConvert是Newtonsoft.Json库的一个静态类,能够便利的在.Net类型和JSON类型之间变换,VS能够快速增加:

接下来,我们们就能够运用这些扩展挑选:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 app.UseSession();
 app.Use(async (context, next) = 
 context.Session.SetObject("CurrentUser",
 new UserInfo { Username = "James", Email = "james@bond.com" });
 await next();
 app.Run(async (context) = 
 var user = context.Session.GetObject UserInfo ("CurrentUser");
 await context.Response.WriteAsync($"{user.Username}, {user.Email}");
} 

运转,此刻页面显现:

经过依靠注入拜访

我们们能够经过结构函数注入方法来运用会话状况,然后经过这个接口来拜访HttpContext特点。

原文:


浏览:

网站建设

流程

    网站建设流程