一、简介:
1、ASP.NET Core 通过向客户端提供包含会话 ID 的 cookie 来维护会话状态。 cookie 会话 ID:
- 会随每个请求发送到应用。
- 由应用用于提取会话数据。
2、会话状态具有以下行为:
- 会话 cookie 特定于浏览器。 会话不会跨浏览器进行共享。
- 浏览器会话结束时删除会话 cookie。
- 如果收到过期的会话 cookie,则创建使用相同会话 cookie 的新会话。
- 不会保留空会话。 会话中必须设置了至少一个值以保存所有请求的会话。 会话未保留时,为每个新的请求生成新会话 ID。
- 应用在上次请求后保留会话的时间有限。 应用设置会话超时,或者使用 20 分钟的默认值。 在以下情况下,会话状态适合存储用户数据:
- 特定于某个特定会话。
- 数据不需要跨会话永久存储。
- 会话数据在调用 ISession.Clear 实现或会话到期时删除。
- 没有默认机制告知客户端浏览器已关闭或者客户端上的会话 cookie 被删除或过期的应用代码。
- 默认情况下,会话状态 cookie 不标记为“基本”。 除非站点访问者允许跟踪,否则会话状态不起作用。 有关详细信息,请参阅 ASP.NET Core 中的一般数据保护条例 (GDPR) 支持。
- 注意:ASP.NET 框架中的无 cookie 会话功能没有替代,因为它被视为不安全,可能导致会话修复攻击。
3、内存中缓存提供程序在应用驻留的服务器内存中存储会话数据。 在服务器场方案中:
- 使用粘性会话将每个会话加入到单独服务器上的特定应用实例。 默认情况下, Azure 应用服务使用 应用程序请求路由 (ARR) 强制实施粘性会话。 然而,粘性会话可能会影响可伸缩性,并使 Web 应用更新变得复杂。 更好的方法是使用 Redis 或 SQL Server 分布式缓存,它们不需要粘性会话。 有关详细信息,请参阅 ASP.NET Core 中的分布式缓存。
- 会话 cookie 通过 IDataProtector 进行加密。 必须正确配置数据保护,以在每台计算机上读取会话 cookie。 有关详细信息,请参阅 ASP.NET Core 数据保护概述和 密钥存储提供程序。
二、使用
先随便贴点代码
1、WebApi_Net7使用Session
2、Session读写值使用示例
3、SessionExtensions扩展类
作者:꧁执笔小白꧂