zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    EasyUI-datagrid中load,reload,loadData方法的区别
    CAD ObjectARX扩展工具的源码(二)
    CAD ObjectARX扩展工具的源码(一)
    ObjectARX常用类和函数
    acdb类杂记
    ARX错误1 LINK : fatal error LNK1104: 无法打开文件“D:win10Desktop123x64Debugxxx.arx”
    关键功能函数是 (VLAX-Add-Cmd)。
    ObjectARX_2020函数收集
    得到ARX程序当前的路径
    objectarx向量的用法2
  • 原文地址:https://www.cnblogs.com/superkklot/p/5136862.html
Copyright © 2011-2022 走看看