zoukankan      html  css  js  c++  java
  • 由 Session 和 Cookie 的区别说起

    Session 和 Cookie 有什么区别?

    最近面试被问到这个问题,和面试官一番讨论了解到面试官心里的答案后,我不太满意。

    面对上面的问题,如果是刚毕业时的我,一定会毫不犹豫说出 Cookie 是存在客户端的,Session 存在服务器这个比较“标准”的答案。

    现在么,我不打算探讨上面的问题,而是打算抓着 Session 说一说。

    抽象层面,Session 的意义是会话。既然是会话,那就意味着每一次交流是有语境的,也就是有上下文的。

    要做到这点,我们需要想办法保持(存储)会话的状态。

    于是很自然的,我们想到下面的方案。

    客户端持有一个门牌号,把会话信息存储在服务端,每次客户端都会带着钥匙发起请求,服务器通过门牌号,领客户端进入房间,就可以开始会话了。

    那么客户端的门牌号存放在哪里呢?

    在单页应用出现以前,所有数据都是通过服务器写进页面里,然后交给浏览器显示的,并且也没有 LocalStorage, SessionStorage 这样的存储空间供同一个域名下的前端页面们交流,于是这个门牌号就只能存放在 Cookie 里了。这大概就是 Session 和 Cookie 唯一的交集了。

    如今,选择的余地大了很多。我们可以把门牌号放在 LocalStorage, SessionStorage 里,如果是单页应用的情况,还可以存放在内存里。

    甚至,我们可以把整个会话用的房间也丢在客户端,如果不涉及机密事项的话。

    所以 Session 只是一个抽象层面的技术概念,具体实现可以有很多种方案,使用 Cookie 只是其中一种,尽管最早设计出 Cookie 的原因或许正是这个。

    以上。

    本着讨论一定要出结果的原则,我还是给出开头抛出的问题的答案吧:

    Session 跟 Cookie 的区别就像是 Java 跟 JavaScript,所以不要再提这个问题了。

  • 相关阅读:
    dpkg: error processing package XXX (--configure) 解决方法 (ubuntu右上角红色警告)
    overlay2 在打包发布流水线中的应用
    别总写代码,这130个网站比涨工资都重要
    csv 导出变成字符串
    mysql 报错 invalid data source name
    win10 phpredis扩展安装
    redis启动命令
    IDEA Plugins:Easycode(代码生成)安装及使用
    mysql设置自动更新时间
    IDEA快捷键之for循环
  • 原文地址:https://www.cnblogs.com/LoadingChan/p/5051041.html
Copyright © 2011-2022 走看看