LP1*_*P13 5 asp.net-core-mvc coreclr asp.net-core asp.net-core-1.0
当我使用经典的 ASP.NET 甚至旧的 Web 表单时,HttpContext.Current.Session 是特定于用户的。因此,当用户发出请求时,他会收到会话 cookie,然后该会话仅属于该用户。因此,两个不同的用户可以在各自的会话中拥有相同名称的会话密钥。
\n\n我正在阅读有关 ASP.NET Core 中会话的文档,看起来它与旧的 asp.net 具有相同的概念,但是文档中的某些注释令人困惑。
\n这里说
\n\n\n会话存储依赖于基于 cookie 的标识符来访问与给定浏览器会话相关的数据(来自特定浏览器和计算机的一系列请求)。您不一定可以假设会话仅限于单个用户,因此请小心在 Session 中存储的信息类型。这是存储特定于特定会话的应用程序状态的好地方,但不需要永久保留\xe2\x80\x99
\n
也在这里说
\n\n\n\n\n会话是非锁定的,因此如果两个请求都尝试修改会话的内容,则最后一个请求将获胜。此外,会话被实现为连贯会话,这意味着所有内容都存储在一起。这意味着,如果两个请求正在修改会话的不同部分(不同的密钥),它们仍然可能会相互影响。
\n
所以可以说我已经登录了 User1 并且根据我设置的某些操作
\n\n `Session.SetInt32("key1", 123)`\nRun Code Online (Sandbox Code Playgroud)\n\n现在 User2 从其他机器登录并根据我设置的某些操作
\n\n `Session.SetInt32("key1", 999)`\nRun Code Online (Sandbox Code Playgroud)\n\n问题 1
\n这会覆盖 User1 的密钥吗?
另请注意这里说
\n\n\n\n\nASP.NET 附带了 IDistributedCache 的多个实现,\n 包括内存中选项(仅在开发和\n 测试期间使用)
\n
问题 2
\n我可以在生产中使用 IDistributedCache 的其他实现是什么?
#1
会话不与用户绑定,因为会话仅由其会话密钥标识,因此如果有人拥有会话密钥/cookie,他就可以访问它。
Asp.Net Core Identity 有自己的 cookie(如果您使用 cookie 身份验证),会话中间件也使用自己的 cookie。
当然,您也可以在没有用户的情况下使用会话。以 Google.com 为例。当您第一次访问 Google 时,它会向您显示政策并设置会话 cookie。您所做的所有设置(即成熟度过滤器)都将保存在每次执行搜索时访问的会话中。
这一切都没有登录,所以根本没有用户。
#2
开源是你的朋友: https ://github.com/aspnet/Caching/tree/dev/src
Redis 和 SqlServer 是默认的分布式缓存,InMemory 仅用于开发/单节点。可能还有其他第三方库添加了支持。
| 归档时间: |
|
| 查看次数: |
4033 次 |
| 最近记录: |