对Session、Cookie的完全理解
导读:这是J道论坛中关于Session、Cookie讨论中一个道友的理解,我觉得很好,就把它给转过来了。
以下是文章内容:
1. HTTP协议本身是“连接-请求-应答-关闭连接”模式的,是一种无状态协议(HTTP只是一个传输协议);
2. Cookie规范是为了给HTTP增加状态跟踪用的(如果要精确把握,建议仔细阅读一下相关的RFC),但不是唯一的手段;
3. 所谓Session,指的是客户端和服务端之间的一段交互过程的状态信息(数据);这个状态如何界定,生命期有多长,这是应用本身的事情;
4. 由于B/S计算模型中计算是在服务器端完成的,客户端只有简单的显示逻辑,所以,Session数据对客户端应该是透明的不可理解的并且应该受控于服务端;Session数据要么保存到服务端(HttpSession),要么在客户端和服务端之间传递(Cookie或url rewritting或Hidden input);
5. 由于HTTP本身的无状态性,服务端无法知道客户端相继发来的请求是来自一个客户的,所以,当使用服务端HttpSession存储会话数据的时候客户端的每个请求都应该包含一个session的标识(sid, jsessionid 等等)来告诉服务端;
6. 会话数据保存在服务端(如HttpSession)的好处是减少了HTTP请求的长度,提高了网络传输效率;客户端session信息存储则相反;
7. 客户端Session存储只有一个办法:cookie(url rewritting和hidden input因为无法做到持久化,不算,只能作为交换session id的方式,即a method of session tracking),而服务端做法大致也是一个道理:容器有个session管理器(如tomcat的 org.apache.catalina.session包里面的类),提供session的生命周期和持久化管理并提供访问session数据的 api;
8. 使用服务端还是客户端session存储要看应用的实际情况的。一般来说不要求用户注册登录的公共服务系统(如google)采用 cookie做客户端session存储(如google的用户偏好设置),而有用户管理的系统则使用服务端存储。原因很显然:无需用户登录的系统唯一能够标识用户的就是用户的电脑,换一台机器就不知道谁是谁了,服务端session存储根本不管用;而有用户管理的系统则可以通过用户id来管理用户个人数据,从而提供任意复杂的个性化服务;
9. 客户端和服务端的session存储在性能、安全性、跨站能力、编程方便性等方面都有一定的区别,而且优劣并非绝对(譬如TheServerSide号称不使用HttpSession,所以性能好,这很显然:一个具有上亿的访问用户的系统,要在服务端数据库中检索出用户的偏好信息显然是低效的,Session管理器不管用什么数据结构和算法都要耗费大量内存和CPU时间;而用cookie,则根本不用检索和维护session数据,服务器可以做成无状态的,当然高效);
原文链接:http://www.javaeye.com/topic/846916
转载于:https://www.cnblogs.com/waw/articles/2187409.html
对Session、Cookie的完全理解相关推荐
- 对session和cookie的一些理解
对session和cookie的一些理解 由于项目需要,最近用session容器比较多,传载的同时加上了自己的一些理解,不足之处还请大家补充和纠正. 一.cookie机制和session机制的区别 * ...
- Asp.net MVC使用Model Binding解除Session, Cookie等依赖
上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依赖"介绍了如何使用Filter来解除对于Session, Cookie的依赖. 其实这个也可以 ...
- 四、Web服务器——Session Cookie JSP入门 学习笔记
今日内容 1. 会话技术1. Cookie2. Session 2. JSP:入门学习 会话技术 1. 会话:一次会话中包含多次请求和响应.* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直 ...
- thinkphp中的session的使用和理解!
session的作用:session可以长时间的保存数据,不丢失. session的常用于: 1.登录,保存登录信息 2.保存购物车信息 3.保存验证码信息 定义session常量 define('W ...
- [转]老生常谈session,cookie的区别,安全性
原文地址:[url]http://blog.51yip.com/php/938.html[/url] 一,为什么session,cookie经常会有人提到 做web开发的人基本上都会用session和 ...
- session,cookie,sessionStorage,localStorage的区别及应用场景
浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...
- Mock session,cookie,querystring in ASB.NET MVC
写测试用例的时候经常发现,所写的功能需要Http上下文的支持(session,cookie)这类的. 以下介绍2种应用场景. 用于控制器内Requet获取参数 控制器内的Requet其实是控制器内的属 ...
- 【转】接口测试Session/Cookie笔记(二)
Windows系统运行计算器命令:calc python显示上一步操作命令:Alt+p python显示上一步操作结果:_(英文下划线) Session是存放在服务器的键值对 ,用于保存客户端的某个特 ...
- Application,Session,Cookie,ViewState和Cache区别
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
- 打印session cookie
打印session cookie requests.utils.dict_from_cookiejar(session.cookies)
最新文章
- 排序算法—sort(),stable_sort(),merge()
- Xcode7.1环境下上架iOS App到AppStore 流程 (2)
- MySLQ排序后标记排行
- Linux 基础学习:文件权限与种类
- Spring EL方法调用实例
- import caffe ImportError: No module named 'skimage'
- Android BLE学习(二): Android与51822蓝牙模块通信流程的实现与分析
- java中线性结构的例子_java数据结构--线性结构
- 2017-2018年Scrum状态调查报告
- pythonselenium一个简单的自动化测试实战:百度搜索
- Python 的多文件和注释
- webRTC之fatal error: ‘absl/strings/string_view.h‘ file not found(二十)
- Python 多进程multiprocessing
- 《About Face 3:交互设计精髓》读书笔记(一)
- 连接NI采集箱9181与9184
- orc识别较慢_超强orc文字识别免注册版
- C++之线程信号量机制
- 在IPCAM上实现RTSP协议直播-live555
- EXCEL2016设置下拉选项,图文说明
- GhostXP_SP3完整纯净版V3.5 By songyongzhi