cookie和session两者的创建,发送和接收怎么回事没有明白
router.get('/session-test', async (ctx, next) => {
// ctx.session
if (ctx.session.viewcount == null) {
// 用户尚未访问
ctx.session.viewcount = 0
}
// 用户已经访问过了
ctx.session.viewcount++ // 递增
// 返回
ctx.body = {
title: 'session-test',
viewcount: ctx.session.viewcount
}
})
老师这里的原理能不能帮我解释一下吗? 听的似懂非懂的。
最大的困惑是ctx.session.viewcount这个cookie和session是在哪一步发出的啊?我看到响应头信息中有Set-Cookie这一条信息。这个浏览器接收到是不是直接就把这一条内容作为cookie保存在浏览器了吗?同时那session我在浏览器接收的响应里面没有看到是不是它不会被发出啊?
还有就是这里怎么接收到请求里面的cookie的呢?然后将cookie的内容和session匹配上。这步老师也没有讲
正在回答
同学你好,对于你的问题解答如下:
1、理解有误
一个用户只对应一个session,所以针对同一个用户不会创建多个session。可以将session理解为一个对象,而viewcount和view是该session对象下的不同属性。老师画了一个简单的对应关系图,当执行ctx.session.xx = xx 时,就会自动创建对应的Cookie和Session,如下:
2、理解是对的
3、整体理解是对的,就是红线标出的这句话有些歧义,Session是保存在服务端的。
祝学习愉快~
同学你好,对于你的问题解答如下:
1、先了解下cookie和session的关系,当使用了koa-generic-session插件后,添加如下配置后,该插件会自动将cookie和session联系起来。
2、这段代码可以结合下面的注释理解:
3、第一次访问页面时,浏览器中没有cookie,服务器端中也没有session,执行ctx.session.viewcount 这句代码时,才同时会在服务端创建一个session,并设置对应的cookie。再次访问页面,发送请求时,会自动携带cookie发送给服务端。
4、是的,浏览器接收到之后会将cookie保存在浏览器中。在发送请求时自动携带这个cookie。
5、session是保存在服务端的,在浏览器中看不到
6、koa-generic-session插件内部做了处理,在服务器端中,可以直接通过ctx.session.xxx获取请求里面的cookie。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星