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

相關文章
相關標籤/搜索