V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

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

  •  
  •   zxCoder · 2021-05-02 15:20:17 +08:00 · 505 次点击
    这是一个创建于 1290 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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

    第 1 条附言  ·  2021-05-02 16:22:18 +08:00

    解决了 cookie要设置max-age

    chinvo
        1
    chinvo  
       2021-05-02 15:23:53 +08:00 via iPhone
    session id 加密保存到 cookie

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

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

    但是没有 session.destroy
    zxCoder
        2
    zxCoder  
    OP
       2021-05-02 15:26:25 +08:00
    @chinvo 我现在设置了 session 很短的存活时间进行测试,session 是正常的,比如 10 秒后再请求就会生成一个新的 session 覆盖,但是 cookie 不会,一直是一开始那一个
    chinvo
        3
    chinvo  
       2021-05-02 15:39:17 +08:00 via iPhone
    session 的 ttl 是在 session store 里面实现的, 和 session id 没有直接关系
    zxCoder
        4
    zxCoder  
    OP
       2021-05-02 15:52:55 +08:00
    @chinvo session 覆盖了,cookie 不会自动覆盖吗
    chinvo
        5
    chinvo  
       2021-05-02 19:02:14 +08:00 via iPhone
    @zxCoder #4 session 和这个 cookie 没有直接关系

    session 里的数据都在服务器上
    zxCoder
        6
    zxCoder  
    OP
       2021-05-02 19:04:08 +08:00
    @chinvo 有关系的,session-id 就是通过 response 的 headers 的 set-cookie 设置的
    chinvo
        7
    chinvo  
       2021-05-02 19:29:51 +08:00 via iPhone
    @zxCoder #6 是, session id 是服务器确定去查哪个 session container 的依据

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

    你就是往 session 里放 500T 的数据再删干净, 再放再删, 循环 500 次, session id 还是那个 session id
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1148 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:56 · PVG 06:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.