cookie和session两者的创建,发送和接收怎么回事没有明白

cookie和session两者的创建,发送和接收怎么回事没有明白

router.get('/session-test'async (ctxnext=> {

  // 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匹配上。这步老师也没有讲

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,对于你的问题解答如下:

1、理解有误

http://img1.sycdn.imooc.com//climg/608b73a2090922cf07330216.jpg

一个用户只对应一个session,所以针对同一个用户不会创建多个session。可以将session理解为一个对象,而viewcount和view是该session对象下的不同属性。老师画了一个简单的对应关系图,当执行ctx.session.xx = xx 时,就会自动创建对应的Cookie和Session,如下:

http://img1.sycdn.imooc.com//climg/608b74fb09deeff505180319.jpg

2、理解是对的

http://img1.sycdn.imooc.com//climg/608b760c09ca8f5806720105.jpg

3、整体理解是对的,就是红线标出的这句话有些歧义,Session是保存在服务端的。

http://img1.sycdn.imooc.com//climg/608b764f09cf7d0607040148.jpg

祝学习愉快~

easyschen 2022-11-04 16:30:49

因为js是弱类型语言,ctx.session.viewcount,就可以直接生成viewcount这个属性

我不知道你是不是卡在这里,我是卡后面课程中的userInfo这里了


https://img1.sycdn.imooc.com//climg/6364cd5d092aeca913360638.jpg

好帮手慕慕子 2021-04-29 19:58:10

同学你好,对于你的问题解答如下:

1、先了解下cookie和session的关系,当使用了koa-generic-session插件后,添加如下配置后,该插件会自动将cookie和session联系起来。

http://img1.sycdn.imooc.com//climg/608a905409f692bc09460440.jpg

2、这段代码可以结合下面的注释理解:

http://img1.sycdn.imooc.com//climg/608a92c309fa42f413730502.jpg

3、第一次访问页面时,浏览器中没有cookie,服务器端中也没有session,执行ctx.session.viewcount 这句代码时,才同时会在服务端创建一个session,并设置对应的cookie。再次访问页面,发送请求时,会自动携带cookie发送给服务端。

4、是的,浏览器接收到之后会将cookie保存在浏览器中。在发送请求时自动携带这个cookie。

5、session是保存在服务端的,在浏览器中看不到

6、koa-generic-session插件内部做了处理,在服务器端中,可以直接通过ctx.session.xxx获取请求里面的cookie。

祝学习愉快~

  • 提问者 weixin_慕丝2377090 #1

    谢谢老师的解答!!!

    关于老师的解答还有两部分是感到困惑的

    第三条中:执行ctx.session.viewcount 这句代码时,才同时会在服务端创建一个session,在前端浏览器设置对应的cookie。再次访问页面,发送请求时,会自动携带cookie发送给服务端。

    老师是不是执行这一句话ctx.session.viewcount的时候会自动创建一组特定的Cookie(sid=123)和Session({123:{asd}})啊?如果是ctx.session.view的时候则会创建的是另外的一组CookieCookie(sid=453)和Session({453:{bws}})。

    还有就是ctx.session.viewcount的Cookie是在那一步放在响应头里面发出的呢?老师上课时候没有解释过,只是给我们看了响应头里面有这一条信息。是不是客户端只要收到响应就自动会把cookie放在浏览器本地啊?


    第四条中:可以直接通过ctx.session.xxx获取请求里面的cookie。可不可以理解为是一个匹配的过程。即:ctx.session.xxx1 在最开始创建了一组带着特定标示的Cookie和Session,Session又是保存在本地的。因此在服务的收到请求中的Cookie时会将Cookie的标示号和Session中的一组以标识号为属性的对象匹配,来获取信息呢?

    2021-04-30 07:08:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师