由 Session 和 Cookie 的区别说起
Session 和 Cookie 有什么区别?
最近面试被问到这个问题,和面试官一番讨论了解到面试官心里的答案后,我不太满意。
面对上面的问题,如果是刚毕业时的我,一定会毫不犹豫说出 Cookie 是存在客户端的,Session 存在服务器这个比较“标准”的答案。
现在么,我不打算探讨上面的问题,而是打算抓着 Session 说一说。
抽象层面,Session 的意义是会话。既然是会话,那就意味着每一次交流是有语境的,也就是有上下文的。
要做到这点,我们需要想办法保持(存储)会话的状态。
于是很自然的,我们想到下面的方案。
客户端持有一个门牌号,把会话信息存储在服务端,每次客户端都会带着钥匙发起请求,服务器通过门牌号,领客户端进入房间,就可以开始会话了。
那么客户端的门牌号存放在哪里呢?
在单页应用出现以前,所有数据都是通过服务器写进页面里,然后交给浏览器显示的,并且也没有 LocalStorage, SessionStorage 这样的存储空间供同一个域名下的前端页面们交流,于是这个门牌号就只能存放在 Cookie 里了。这大概就是 Session 和 Cookie 唯一的交集了。
如今,选择的余地大了很多。我们可以把门牌号放在 LocalStorage, SessionStorage 里,如果是单页应用的情况,还可以存放在内存里。
甚至,我们可以把整个会话用的房间也丢在客户端,如果不涉及机密事项的话。
所以 Session 只是一个抽象层面的技术概念,具体实现可以有很多种方案,使用 Cookie 只是其中一种,尽管最早设计出 Cookie 的原因或许正是这个。
以上。
本着讨论一定要出结果的原则,我还是给出开头抛出的问题的答案吧:
Session 跟 Cookie 的区别就像是 Java 跟 JavaScript,所以不要再提这个问题了。
由 Session 和 Cookie 的区别说起的更多相关文章
- SESSION 与 COOKIE的区别是
有以下几点 1.session是存在服务器端,cookie是存在客户端 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,所以session安全性要比cookie ...
- session和cookie的区别是什么,他们都是什么.
Session是存储在服务器端的,Cookie是存储在客户端的. Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息.如何识别特定的客户呢?cookie就可以做到.每次HTTP请求时, ...
- session与cookie的区别是什么?如果客户端禁用了cookie功能,将会对session有什么影响?
cookie 和session 的区别: a.cookie数据存放在客户的浏览器上,session数据放在服务器上. b.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE ...
- 2020-07-11:session和cookie的区别是什么?
福哥答案2020-07-11: 1.保存位置:session服务端.cookie客户端.2.安全性:session相对安全,cookie相对不安全.3.存储类型:session能够存储任意的对象,co ...
- Session与Cookie概念
摘:一.Session机制session是一种服务器端的状态管理技术,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.当程序需要为某个客户端的请求创建一个session的时候,服务 ...
- Session和Cookie的学习笔记2
<?php /* Cookie在计算机中保存的格式 用户名@网站地址[数字].txt Cookie在文件夹下,每个Cookie文件都是一个简单而又普通的文件件而不是程序,Cookie中的内容大多 ...
- session和cookie详解2
http 之session和cookie http://www.cnblogs.com/ForEverKissing/archive/2008/05/23/1205503.html Session简介 ...
- session 与 cookie的区别用法
//设置cookie方法 setcookie("name",'zhangsan'); setcookie("name",'zhangsan',time()+60 ...
- 【转】session和cookie详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
随机推荐
- golang 防知乎 中文验证码 源码
原创,转载请注明出处! 最开始用图形来模仿文字进行各种角度的倒立和排列,后来切换为文字后,有很多问题.总结如下: 1.程序在画图形和画文字方面不一样,图形的是从原点开始(0,0),而文字则从文字的基线 ...
- Linux 系统的日志目录
连接时间的日志 连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,通过who查看 who /var/log/wtmp [连接时间日志] who /var/log/ ...
- 铁乐学python_day29_模块与包学习4
大部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 编译python文件 编译python文件是为了提高加载模块的速度,强调强调强调:提高的是加载速度而绝非运行速度 ...
- php 导出
//导出 //放在model层的类 <?phpnamespace frontend\models; use yii\base\model; /** * @copyright (c) 2014 a ...
- UNIX日期与时间
日期和时间 UINX系统内部有一个变量记录自开机以来经过的时间.从用户的角度,UNIX时间函数分为3类: 度量进程已使用CPU时间的函数: 给出绝对时间或日历时间的函数: 设置闹钟.定时器以及睡眠的函 ...
- 一、Linux中的常用命令2 二、Vim编辑器的使用
一.Linux的常用命令###<1>文件目录操作 13. echo:用于输出字符串,shell编程,echo 1. 输出字符串 : echo str ,shell编程会使用(类似java中 ...
- [webpack] Webpack 别名
存在这样一种情况,有时候项目中,存在一些 公共的组件,通常会抽取出来,放在一个统一的文件夹中. 然后大家就可以再 各个 模块里面 愉快的使用该 组件了. 但是也带来一个坑爹的问题 组件放在 com ...
- 代码覆盖率测试及 GitHub 自动化集成
本文对应项目为 learn-coverage-test,可以对照项目案例进行阅读. 覆盖率测试 在写代码的时候,我们有时候会进行代码测试以保证我们代码的可执行性.但是测试代码只能保证测试案例能够通过, ...
- TensorFlow函数(七)tf.argmax()
tf.argmax(input, dimension, name=None) 参数: input:输入数据 dimension:按某维度查找. dimension=0:按列查找: dimension= ...
- c++ const static
const作用: 1.定义常量,可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. const int Max = 100; void f(const int i) { i=10;//error ...