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 管理应用程序的状态的更多相关文章

  1. 小程序全局状态管理,在页面中获取globalData和使用globalSetData

    GitHub: https://github.com/WozHuang/mp-extend 主要目标 微信小程序官方没有提供类似vuex.redux全局状态管理的解决方案,但是在一个完整的项目中各组件 ...

  2. 微信小程序之状态管理B

    书接上文哈 咱们定义了个状态管理对象 逻辑应该是这样的 if (json.product.activity.type == "Coin1") { this.activity.coi ...

  3. 微信小程序之状态管理A

    其实这个标题 不是很对 主要是最近小程序项目中 有这么一个状态 所有商品都共用一个商品详情页面  大概就是这样子  为了公司 保险起见,一些展示的内容已经处理 但是无伤大雅 就是这么两个按钮 左侧粉色 ...

  4. (11)Web程序保存状态的几种方式,Application,Session,Cookie,ViewState

    WEb程序保存状态的方式有这样几种: 1.Application:保存在Application中的数据是全局有效的:Application里面存放的应该是访问多修      改较少并且是全局至少大部分 ...

  5. Oracle Hyperion Planning 11.1 .1:创建与管理应用程序 第1课:Planning概述

    第1课:Planning概述 1.说明 Oracle Enterprise Performance Management system Oracle Enterprise Performance Ma ...

  6. supervisor 管理应用程序

    supervisor 进程管理 主要包含后台进程 supervisord 和控制台 supervisorctl 两个程序 supervisor # 官方文档 http://www.supervisor ...

  7. State Processor API:如何读取,写入和修改 Flink 应用程序的状态

    过去无论您是在生产中使用,还是调研Apache Flink,估计您总是会问这样一个问题:我该如何访问和更新Flink保存点(savepoint)中保存的state?不用再询问了,Apache Flin ...

  8. Java 监控基础 - 使用 JMX 监控和管理 Java 程序

    点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码网站 已经收录,有很多知识点和系列文章. 此篇文 ...

  9. zh-Hans vs.net 通过 管理nuget程序包下载简体中文语言包 zh-cn

    zh-Hans  vs.net 通过 管理nuget程序包下载简体中文语言包 在搜索中输入:zh-hans

随机推荐

  1. 一个C#的XML数据库访问类

    原文地址:http://hankjin.blog.163.com/blog/static/33731937200942915452244/ 程序中不可避免的要用到配置文件或数据,对于数据量比较小的程序 ...

  2. [UOJ Round#4 A] [#51] 元旦三侠的游戏 【容斥 + 递推】

    题目链接:UOJ - 51 据说这题与 CF 39E 类似. 题目分析 一看题目描述,啊,博弈论,不会!等待爆零吧... 这时,XCJ神犇拯救了我,他说,这题可以直接搜啊. 注意!是用记忆化搜索,状态 ...

  3. 创建mysql数据库

    mysql> create database wzhpush3 default charset utf8 collate utf8_general_ci;

  4. ORACLE PL/SQL异常处理(Exception)学习笔记

    1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...

  5. cf B Three matrices

    #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ][] ...

  6. 可重入与线程安全(大多数Qt类是可重入,非线程安全的)

    可重入与线程安全 在Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序.假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的. ...

  7. QVariant(相当于是Java里面的Object,起到一个数据类型“擦除”的作用,可以使用Q_DECLARE_METATYPE进行注册)

    =QVariant= [%这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用.比如我们的 table单元格可以是string,也可以是 ...

  8. Linux 配置多IP

    这里以红帽Linux为例.假定原系统已配置一个IP,地址为:192.168.20.140,配置文件路径/etc/sysconfig/network-script/ifcfg-eth0.现在需要配置一个 ...

  9. 14.5.2.2 autocommit, Commit, and Rollback

    14.5.2.2 autocommit, Commit, and Rollback 在InnoDB,所有的用户活动发生在一个事务里, 如果自动提交模式是启用的, 每个SQL语句形成一个单独的事务.默认 ...

  10. 【HDOJ】2333 Assemble

    二分+贪心策略.其中注释处很重要. #include <iostream> #include <cstdio> #include <cstring> #includ ...