ASPNET5 管理应用程序的状态
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
ASPNET5 管理应用程序的状态的更多相关文章
- 小程序全局状态管理,在页面中获取globalData和使用globalSetData
GitHub: https://github.com/WozHuang/mp-extend 主要目标 微信小程序官方没有提供类似vuex.redux全局状态管理的解决方案,但是在一个完整的项目中各组件 ...
- 微信小程序之状态管理B
书接上文哈 咱们定义了个状态管理对象 逻辑应该是这样的 if (json.product.activity.type == "Coin1") { this.activity.coi ...
- 微信小程序之状态管理A
其实这个标题 不是很对 主要是最近小程序项目中 有这么一个状态 所有商品都共用一个商品详情页面 大概就是这样子 为了公司 保险起见,一些展示的内容已经处理 但是无伤大雅 就是这么两个按钮 左侧粉色 ...
- (11)Web程序保存状态的几种方式,Application,Session,Cookie,ViewState
WEb程序保存状态的方式有这样几种: 1.Application:保存在Application中的数据是全局有效的:Application里面存放的应该是访问多修 改较少并且是全局至少大部分 ...
- Oracle Hyperion Planning 11.1 .1:创建与管理应用程序 第1课:Planning概述
第1课:Planning概述 1.说明 Oracle Enterprise Performance Management system Oracle Enterprise Performance Ma ...
- supervisor 管理应用程序
supervisor 进程管理 主要包含后台进程 supervisord 和控制台 supervisorctl 两个程序 supervisor # 官方文档 http://www.supervisor ...
- State Processor API:如何读取,写入和修改 Flink 应用程序的状态
过去无论您是在生产中使用,还是调研Apache Flink,估计您总是会问这样一个问题:我该如何访问和更新Flink保存点(savepoint)中保存的state?不用再询问了,Apache Flin ...
- Java 监控基础 - 使用 JMX 监控和管理 Java 程序
点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码网站 已经收录,有很多知识点和系列文章. 此篇文 ...
- zh-Hans vs.net 通过 管理nuget程序包下载简体中文语言包 zh-cn
zh-Hans vs.net 通过 管理nuget程序包下载简体中文语言包 在搜索中输入:zh-hans
随机推荐
- ha666_go运行环境配置
项目地址:http://git.oschina.net/ha666/ha666_go 服务器配置: CPU: 1核 内存: 1024 MB 操作系统: CentOS 7.0 64位 内网IP: 10. ...
- VLAN间通信----实验
方法1.增加物理线路 需求:PC0连接SW的F0/1,PC1连接SW的F0/2; SW创建VLAN10,VLAN20; PC0划到VLAN10; PC1划到VLAN20; 现要求借用路 ...
- python 单元测试
http://blog.csdn.net/five3/article/details/7104466
- crf 分词(待)
http://blog.csdn.net/marising/article/details/5769653
- lpad rpad
Lpad()函数的用法:lpad函数将左边的字符串填充一些特定的字符其语法格式如下: lpad(string,n,[pad_string]) string:可是字符或者参数 ...
- InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoDB才会使用行级锁,否则,InnoDB将使用表锁!
InnoDB行锁是通过索引上的索引项来实现的,这一点MySQL与Oracle不同,后者是通过在数据中对相应数据行加锁来实现的. InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoD ...
- A Knight's Journey(dfs)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 25950 Accepted: 8853 Description Back ...
- Light OJ 1030 - Discovering Gold
题目大意: 给你一个1*N的方格,你初始位置是在1,给你一个骰子,假设你现在的位置是X,你投掷一个骰子掷的点数是y, 那么你的新位置就是 X+y, 并且你可以得到新位置的宝藏.假如X+y > N ...
- 图论(网络流,分数规划):COGS 2047. [ZOJ2676]网络战争
2047. [ZOJ2676]网络战争 ★★★ 输入文件:networkwar.in 输出文件:networkwar.out 评测插件 时间限制:5 s 内存限制:32 MB [题目描 ...
- 在Apache+php中使用json来通讯
示例代码: <?php // 获取输入的内容 $request = http_get_request_body(); // 按json格式解析成一个 php对象 $json_obj = json ...