ASPNET5 管理应用程序的状态

1. 应用程序状态选项安全

在ASP.NET5当中,全局的Application对象没有了,转而被In Memory Caching所代替,ASPNET5当中有下多种管理状态的方式:session

HttpContext.Items :它里面的内容的生命周期是针对每一个request的。它被很好的应用在组件与组件、中间件与中间件的交流之间。例如:app

app.Use(async (context, next) => { context.Items["isVerified"] = true; await next.Invoke(); });async

这样在另外一个middle ware中你就能够访问它,例如:spa

app.Run( async (context) => { await context.Response.WriteAsync("Verified request? " + context.Items["isVerified"]); });中间件

Querystring and Post: 这种方式你们应该已经了解了,可是这种不安全,要注意CSRF的防范。对象

Cookies接口

Session生命周期

session被做为一个中间件来实现的,你能够经过nuget来安装, 下面是安装后的配置:内存

"dependencies": {

  "Microsoft.AspNet.Session": "1.0.0-rc1-final",

  "Microsoft.Extensions.Caching.Memory": "1.0.0-rc1-final",

}

安装好后,你也必须在Startup文件里配置,不然会报错。 会话创建在IDistributedCache之上,配置内存中的session, 你须要在ConfigureServices里添加以下代码:

services.AddCaching();

services.AddSession();

而后在Configure里面添加以下代码:

app.UseSession();

一旦你配置好了以后,你能够在HttpContext里面引用Session。

实现细节:

Session是基于Cookie来实现的,它的默认名字是:“.AspNet.Session”, 它不可被客户端访问,由于它被设置了HttpOnly。

你能够在配置session的时候更改它的名字,闲置时间,以下:

services.AddSession(options => { options.CookieName = ".AdventureWorks.Session";

options.IdleTimeout = Timespan.FromSeconds(10);});

注意:Session是没加锁的,同一时刻有两个请求想对会话修改时,最晚的修改会覆盖前面的修改。Session的实现是一个总体,不是与key相关的,若是两个request修改不一样的key, 它们也可能被覆盖.

要使用session,它是经过HttpContext里的属性Session来访问的,它实现ISession接口。

public interface ISession

{

  Task LoadAsync();

  Task CommitAsync();

  bool TryGetValue(string key, out byte[] value);

  void Set(string key, byte[] value);

  void Remove(string key);

  void Clear();

  IEnumberable<string> Keys {get;}

}

另外,它有一些扩展方法,以下:

context.Session.SetInt32("key1", 123);

int? val = context.Session.GetInt32("key1");

context.Session.SetString("key2", "value");

string stringVal = context.Session.GetString("Key2");

byte[] result = context.Session.Get("key3");

若是 你要存储复杂对象,你应用序列化成byte[]来存储,而后从byte[]里反序列出对象。

Cache

Configuration

相关文章
相关标签/搜索