在 ASP.NET CORE 中使用 SESSION

摘要:
在本文中,我将简要介绍Session在ASP中的使用。NET核心。安装并配置Sessionuget以添加对Microsoft的引用。AspNetCore会话是基于IDistributedCache构建的,因此必须引用IDistributed Cache实现。ASP。NET Core提供了多个IDistributedCache实现。在内存服务中。AddDistributedMemoryCache();服务。AddSession();SQLServernuget添加参考Microsoft。扩展。缓存SqlServerSqlServerCache实现允许分布式缓存使用SQL Server数据库作为其备份存储//MicrosoftSQLServerImplementationofDistributedCache。//请注意,这将需要设置pthesessionstatedatabase.services。添加分布式SqlServerCache;服务。AddSession();Redinuget Add Reference Microsoft.Extension.Cacheng。RedisRedis是一个开源内存数据存储,通常用作分布式缓存。您的ASP NETCore应用程序使用RedisDistributedCache实例来配置缓存实现。因此,ConfigureStagingServices方法配置RedisCache:services。AddDistributedRedisCache;然后在cs的Config方法中的Startup上,使用会话中间件。所有中间件的配置顺序非常重要。只有在调用UseSession后才能访问会话。

【转发】https://www.cnblogs.com/liuxiaoji/p/6860104.html

Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件。在本文中我将会简单介绍一下 ASP.NET Core 中的 Session 的使用方法。

安装配置 Session

nuget 添加引用 Microsoft.AspNetCore.Session 

ession 是基于 IDistributedCache 构建的,所以必须引用一种 IDistributedCache 的实现,ASP.NET Core 提供了多种 IDistributedCache 的实现 (RedisSQL ServerIn-memory) 

In-memory

services.AddDistributedMemoryCache();
services.AddSession();

SQL Server

nuget 添加引用 Microsoft.Extensions.Caching.SqlServer

SqlServerCache实现允许分布式缓存使用SQL Server数据库作为其后备存储。要创建SQL Server表,您可以使用sql-cache工具,该工具将使用您指定的名称和模式创建一个表。

要使用sql-cache工具,请添加SqlConfig.Tools.csproj文件的<ItemGroup>元素并运行dotnet恢复。

<ItemGroup>
  <DotNetCliToolReference Include="Microsoft.Extensions.Caching.SqlConfig.Tools" Version="1.0.0-msbuild3-final" />
</ItemGroup>

通过运行以下命令来测试SqlConfig.Tools

C:DistCacheSamplesrcDistCacheSample>dotnet sql-cache create --help

sql-cache工具将显示用法,选项和命令帮助,现在你可以创建表到sql server中,运行“sql-cache create”命令:

C:DistCacheSamplesrcDistCacheSample>dotnet sql-cache create "Data Source=(localdb)v11.0;Initial Catalog=DistCache;Integrated Security=True;" dbo TestCache
   info: Microsoft.Extensions.Caching.SqlConfig.Tools.Program[0]
       Table and index were created successfully.

创建的表格具有以下架构:

在 ASP.NET CORE 中使用 SESSION第1张

注意的ConnectionString(以及可选地,SchemaNameTableName)通常应该被存储的源控制(如UserSecrets)以外,因为它们可能包含凭证。

像所有的缓存实现一样,你的应用程序应该使用一个实例来获取和设置缓存值IDistributedCache,而不是SqlServerCache。该示例SqlServerCacheProduction环境中实现(因此已配置ConfigureProductionServices)。

// Microsoft SQL Server implementation of IDistributedCache.
// Note that this would require setting up the session state database.
services.AddDistributedSqlServerCache(o =>
{
  o.ConnectionString = "Server=.;Database=ASPNET5SessionState;Trusted_Connection=True;";
  o.SchemaName = "dbo";
  o.TableName = "Sessions";
});
services.AddSession();

Redis

nuget 添加引用 Microsoft.Extensions.Caching.Redis

Redis是一款开源的内存数据存储,通常用作分布式缓存。您可以在本地使用它,并且可以为Azure托管的ASP.NET Core应用程序配置Azure Redis缓存。您的ASP.NET Core应用程序使用RedisDistributedCache实例配置缓存实施。

您可以ConfigureServices通过请求一个实例IDistributedCache(参见上面的代码)来配置Redis实现并在您的应用代码中访问它。

在示例代码中,RedisCache当为服务器配置Staging环境时使用实现。因此该ConfigureStagingServices方法配置RedisCache:

services.AddDistributedRedisCache(options =>  {  options.Configuration = "localhost";  options.InstanceName = "SampleInstance";  });

接着在 Startup.cs 的 Config 方法中配置使用 Session 中间件,所有中间件的配置顺序非常重要,必须在 UseSession 调用后才能访问 Session 。

// 必须在 UseMvc 之前调用
app.UseSession();

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

在 AddSession 和 UseSession 方法中可以传入一个 SessionOptions 参数,通过该参数可以设置 Session 的 Cookie name, Cookie path 等信息。

配置完成后,就可以使用 Session 保存数据了。

具体实现redis实现 https://www.cnblogs.com/liuxiaoji/p/9259747.html

使用 Session 存储数据

Session 安装配置好就可以通过 HttpContext.Session 来保存和读取数据了。由于 Session 是基于 IDistributedCache 构建的,因此 Session 只能存储 byte[] 数据,这样使用起来很不方便,好在有很多扩展方法可以用来直接读取和保存 string、int 等类型数据。

一个 Session 使用的简单示例:

public IActionResult Index()
{
    HttpContext.Session.SetString("SessionStartedTime", "Session started time:" + DateTime.Now.ToString());
    return View();
}

public IActionResult About()
{
    ViewData["CurrentTime"] = "Current time:" + DateTime.Now.ToString();
    ViewData["SessionStartedTime"] = HttpContext.Session.GetString("SessionStartedTime");

    return View();
}

或者设置一个扩展类也可以直接将实体类序列化成json存储

public static class SessionExtensions
    {
        public static void Set<T>(this ISession session, string key, T value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }

        public static T Get<T>(this ISession session, string key)
        {
            var value = session.GetString(key);
            return value == null ? default(T) :
                                  JsonConvert.DeserializeObject<T>(value);
        }
    }

免责声明:文章转载自《在 ASP.NET CORE 中使用 SESSION》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇爬虫cookies详解学习 NGINX下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

keycloak~自定义rest接口

rest资源 对于我们集成keycloak来说,你可能会遇到它没有实现的功能,这时需要对kc进行扩展,资源的扩展是其中一个方面,它需要实现RealmResourceProvider和RealmResourceProviderFactory两个接口,然后在KC启动之后,它可以被注册到IOC容器里,方便以后我们直接使用。 KC里的扩展是开闭原则OCP的完美体现...

oracle用户创建及权限设置(转)

  权限:   create session   create table   unlimited tablespace   connect   resource   dba   例:   #sqlplus /nolog   SQL> conn / as sysdba;   SQL>create user username identif...

数据库连接池SQLAlchemy中多线程安全问题

数据库连接池SQLAlchemy中多线程安全的问题 1、数据库模块model.py from sqlalchemy.orm import scoped_session from sqlalchemy.orm import sessionmaker session_factory = sessionmaker(bind=some_engine) Ses...

ActiveMQ消息的消费原理

消费端消费消息:   在 初识ActiveMQ 中我提到过,两种方法可以接收消息,一种是使用同步阻塞的ActiveMQMessageConsumer#receive方法。另一种是使用消息监听器MessageListener。这里需要注意的是,在同一个session下,这两者不能同时工作,也就是说不能针对不同消息采用不同的接收方式。否则会抛出异常。至于为什么...

php的cookie和session相同主域名共享

如何使用chrome查看cookie和session详见另一篇文章,点这里 首先说cookie, $cookieDomain = '.elf.com'; setcookie('elf', 'im elf cookie', time()+300, '/', $cookieDomain); 如上代码设置的cookie,在主域名为 elf.com的所有二级域...

Fake SQL Tuning, v$session, etc...

随便起了个名字,因为不知道叫啥好。主要是想把最近遇到的一个事情简单记录下,仅此而已。为啥叫Fake SQL Tuning, 自然不是真正地谈SQL优化,因为我也说不出来啥玩意,毕竟SQL优化不是简单的一两句话就可以说出个所以然的。 最近遇到个问题,我负责维护的一个产品的用户说他们有一个process老是跑不完,卡在那里。这个产品前端用PB做,中间部分计算引...