.net core web api service.AddSession 自动添加的那个 cookie 是啥

2021 年 5 月 2 日
 zxCoder
services.AddSession(s => {
                s.Cookie.Name = ".Web.Session";
                s.Cookie.HttpOnly = true;
                s.IdleTimeout = TimeSpan.FromSeconds(10);
            });

然后在 Controller 里

HttpContext.Session.Set("User_Role", ur);

有两个问题不懂

  1. 设置这个 Session 的时候会自动设置客户端的 cookie,但是当客户端已经有了 cookie,后面无论再怎么请求这个接口,都不会重新设置覆盖这个 cookie,必须手动把 cookie 删除才行,这是为何?
  2. 自动设置的 Cookie 和后台 HttpContext.Session.Id 看到的不太意义,哪个才是 session-id 呢?

第二个问题解决了,源码上说的是 This is not the same as the session cookie

898 次点击
所在节点    问与答
7 条回复
chinvo
2021 年 5 月 2 日
session id 加密保存到 cookie

asp.net core 的所有 cookie, 除了那个前端设置的 GDPR cookie, 都是用 data protection 加密的

要清除 session, 用 HttpContext.Session.Clear();

但是没有 session.destroy
zxCoder
2021 年 5 月 2 日
@chinvo 我现在设置了 session 很短的存活时间进行测试,session 是正常的,比如 10 秒后再请求就会生成一个新的 session 覆盖,但是 cookie 不会,一直是一开始那一个
chinvo
2021 年 5 月 2 日
session 的 ttl 是在 session store 里面实现的, 和 session id 没有直接关系
zxCoder
2021 年 5 月 2 日
@chinvo session 覆盖了,cookie 不会自动覆盖吗
chinvo
2021 年 5 月 2 日
@zxCoder #4 session 和这个 cookie 没有直接关系

session 里的数据都在服务器上
zxCoder
2021 年 5 月 2 日
@chinvo 有关系的,session-id 就是通过 response 的 headers 的 set-cookie 设置的
chinvo
2021 年 5 月 2 日
@zxCoder #6 是, session id 是服务器确定去查哪个 session container 的依据

但是操作 session 和这个 cookie 没有直接关系

你就是往 session 里放 500T 的数据再删干净, 再放再删, 循环 500 次, session id 还是那个 session id

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/774631

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX