alsotang / node-lessons

:closed_book:《Node.js 包教不包会》 by alsotang
16.53k stars 4.7k forks source link

lesson16 中session cookie问题 #126

Closed Lx15 closed 7 years ago

Lx15 commented 7 years ago

在 lesson16 中说session_id 在 cookie 中的存储方式是 session cookie。即,当用户一关闭浏览器,浏览器 cookie 中的 session_id 字段就会消失。我做测试 ,在浏览器关闭时 cookie中的session_id 并没有消失 代码:

 var session = require('express-session');

app.use('/ajax',session({
  secret: 'recommand 128 bytes random string', 
  cookie: { maxAge: 60 * 10000 }
}));

app.use(express.static('./'))
app.all('*',function(req,res,next){
    res.set({
    'Content-Type': 'application/json',
    'Access-Control-Allow-Origin':'*'
    });
    if(req.method =='OPTIONS'){
        res.send(200)
    }else{
        next()
    }
})
app.get('/ajax', function(req, res){
    console.log(req.cookies)
    res.send("hi..............");
})

还有一个问题是 在文中提到的session cookie 和 cookie-session 我总是没有搞清楚是个什么意思,老师能解释一下么?

alsotang commented 7 years ago
  1. cookie 中的 session_id 没消失的问题,你试着退出浏览器而非关闭tab试试。session cookie 其实说的是 cookie 的存在不是持久性的。 image https://imququ.com/post/host-only-cookie.html

  2. session cookie 强调 cookie 的失效机制;cookie-session 说的是 session 中的大量数据是存在 cookie 而非 redis 中。

Lx15 commented 7 years ago

多谢老师我明白了 session cookie ,我之前测试的session_id 仍存在 是我判断错了,我看的是开发工具 Application ->Cookies中存放的session_id,以为是还存在着session_id , 而实际是 Application中的session_id 是由于设置cookie 的maxAge值未过期所以才在,cookie的生命周期是由expire 或maxAge决定,但是即便这些值存在,重启浏览器后再发请求session_id 也是不能发过去的。