ASPNET5 管理应用程序的状态
2016-02-15 21:56
483 查看
1. 应用程序状态选项
在ASP.NET5当中,全局的Application对象没有了,转而被In Memory Caching所代替,ASPNET5当中有下多种管理状态的方式:
HttpContext.Items :它里面的内容的生命周期是针对每个request的。它被很好的应用在组件与组件、中间件与中间件的交流之间。例如:
app.Use(async (context, next) => { context.Items["isVerified"] = true; await next.Invoke(); });
这样在另一个middle ware中你就可以访问它,例如:
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
在ASP.NET5当中,全局的Application对象没有了,转而被In Memory Caching所代替,ASPNET5当中有下多种管理状态的方式:
HttpContext.Items :它里面的内容的生命周期是针对每个request的。它被很好的应用在组件与组件、中间件与中间件的交流之间。例如:
app.Use(async (context, next) => { context.Items["isVerified"] = true; await next.Invoke(); });
这样在另一个middle ware中你就可以访问它,例如:
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
相关文章推荐
- Asp.net MVC 视图之公用代码
- 在asp.net webform中的 gridview 里面的一些基本操作
- ASP.NET MVC 实现二级域名
- (转)WEB第三方打印控件[ASP.NET常用工具]
- 在ASP.NET MVC项目中使用RequireJS库的用法示例
- ASP.NET 页生命周期概述1
- IIS 7.0 的 ASP.NET 应用程序生命周期概述
- IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
- 核心ASP.NET
- Delphi XE7下 Intraweb 发布为ASP.NET应用程序
- 【B/S】ASP.NET内建对象和应用组件
- Asp.net: WebForm基础上构建Mvc的方法
- ASP.NET使用UpdatePanel实现AJAX
- 在ASP.NET MVC项目中使用RequireJS库的用法示例
- VS调试ASP.NET浏览器会不断的发出POLL请求
- ASP.NET CORE 1.0 资料
- ASP.NET 页生命周期概述
- asp.net mvc 实现判断用户是否登录的两种方式
- GridView向AspxPopupControl传递参数实现弹出层 (2011-09-30 18:48:19) 转载▼ 标签: gridview aspx popupcontrol 参数传递
- 玩转Asp.net MVC 的八个扩展点