cookie和session的用法用途,执行流程,区别联系
1.为什么要有cookie/session?
在客户端浏览器向服务器发送请求,服务器做出响应之后,二者便会断开连接(一次会话结束)。那么下次用户再来请求服务器,服务器没有任何办法去识别此用户是谁。比如web系统常用的用户登录功能,如果没有cookie机制支持,那么只能通过查询数据库实现,并且要命的是每次刷新页面都要重新输入表单信息查询一次数据库才可以识别用户,这会给开发人员带来大量冗余工作并且简单的用户登录功能会给服务器带来巨大的压力。
在此背景下,就急需一种机制来解决此问题。分析可知,以上需求的实现就要客户端每次访问服务器时从客户端带上一些数据(相当于身份证)告知服务器自己是谁。这个数据就是cookie!并且客户端访问服务器时不能将所有cookie都带过去,比如访问百度就不能把谷歌的cookie带给百度,这个设置方式在后面介绍。
那么有了cookie,为什么还要有session呢?有了cookie可以向服务器证明用户身份了,我们的web系统中是不是需要将用户的详细信息储存在某个位置供页面调用呢?用户的详细信息就包括姓名,年龄,性别等信息。而cookie是存在于客户端的,将用户详细信息通过网络发送到客户端保存是极不安全的。且cookie大小不能超过4k,不能支持中文。这就限制cookie不能满足存储用户信息的需求。这就需要一种机制在服务器端的某个域中存储一些数据,这个域就是session。
总而言之,cookie/session的出现就是为了解决http协议无状态的弊端,为了让客户端和服务端建立长久联系而出现的。
2.什么是会话技术?
帮你存储一些在交互过程临时产生的数据
当你打开浏览器,访问一个网站,认为会话开始了,当你关闭浏览器的时候,会话结束了
3.cookie/session执行流程(这才是重点)
cookie执行流程
当你去访问应用的时候,来到服务器。服务器设置一个cookie(后边介绍api),在做响应的时候会通过set-cookie响应头将cookie带给浏览器。
来到浏览器,浏览器会将此数据保存起来,接下来再次去访问服务器的时候,浏览器会根据cookie的path属性(后边api介绍)将这些数据带回去(设置了一个叫做cookie的请求头),来到服务器,服务器有对应的api获取这些值,有了值就知道用户是谁了。
session执行流程
浏览器发起一个请求到服务器,服务器先检查你是否携带了一个叫做JSESSIONID的cookie。
如果有携带,会将此cookie的值取出来(比如为aaa123),然后从服务器的session池中找到ID为aaa123的session返回给调用者。
如果没有携带这个JSESSIONID的cookie,那么服务器将会自动创建一个session对象并且生成一个随机字符串(如aaa123)作为此session的ID保存到session池中。在服务器为客户端浏览器作响应的时候自动创建一个键为“JSESSIONID” 值为“aaa123”的cookie对象让浏览器储存起来以便下次再访问的时候带过来。
4.cookie的常用属性api
Cookie cookie = new Cookie("name","tom"); // 新建Cookie
cookie就是键值对的数据,如果是中文不能直接设置,需要编码
cookie.setDomain("www.baidu.com"); // 设置域名
这样设置域名的话,该cookie会被提交到www.baidu.com但是不会被提交到zhidao.baidu.com。要想都提交过去,需要这样设置cookie.setDomain(".baidu.com");
cookie.setPath("/search"); // 设置路径
这样设置路径,该cookie只会被提交到www.baidu.com/search路径下的页面,也就是说在www.baidu.com/aaa下的页面是获取不到该cookie的。一般cookie在某个网站里都是可用的,直接设置为/,cookie.setPath("/");
cookie.setMaxAge(60*60*24*7); // 设置有效期
MaxAge属性单位为秒,默认为-1也就是关闭浏览器自动销毁。cookie.setMaxAge(60*60*24*7); 这样设置意思是不管浏览器关闭与否,将此cookie持久化到客户端文件里保存一周。参数为正数时浏览器都会将相应的cookie做持久化处理。
response.addCookie(cookie); // 输出到客户端
5.session常用api
HttpSession session = request.getSession(); // 创建session
session.setAttribute("name","tom"); // 设置Session属性
out.println("欢迎您:" +session.getAttribute("name")); // 获取Session属性
在tomcat配置文件中配置session的超时时间
<session-config>
<session-timeout>分钟为单位</session-timeout>
</session-config>
6.cookie/session的区别与联系
区别:
1.cookie存放在客户端,session存放在服务器端。
2.cookie只能存放4k的数据,而session理论上没有做限制
联系:
session虽说存放在服务器端,但是仔细看刚才的执行流程你会明白,session是依赖于cookie的,这一点也是本篇文章想要着重强调的
7.cookie/session使用注意事项
1.cookie大小有限制 4k
2.cookie不能跨浏览器
3.cookie不支持中文
4.如果是安全性较高的数据应存放在session中,因为cookie存放在客户端总会轻易被不法分子获取
5.如果是访问量特别大的网站,尽量不要在session中存储用户数据,因为每个用户存一个session会给服务器造成很大的压力
8.新手使用session时常踩的坑
很多人使用session时希望用户信息可以保存一段时间比如保存7天,于是配置了Tomcat的
<session-config>
<session-timeout>7天</session-timeout>
</session-config>。
配置完后发现,关闭浏览器后再访问还是取不到session。这是因为session的配置没起作用吗?不是的,其实session还是存在于服务器的,只是没有设置cookie持久化,cookie默认就会在浏览器关闭时销毁,所以叫做JSESSIONID的cookie也被销毁了,再到服务器的时候没有这个叫JSESSIONID的cookie就取不到相关的session了。
所以,如果想7天内都能访问到session,需要将cookie也设置持久化!
cookie和session的用法用途,执行流程,区别联系的更多相关文章
- cookie,session和token的概念以及区别
cookie: 采用客户端保存状态的方案: cookie的组成:名字,值过去时间,路径以及域: 没有设置时间:随着浏览器的打开和关闭决定: 设置了时间:浏览器就会把cookie保存在硬盘上,根据时间来 ...
- cookie、session、sessionid ,jsessionid 的区别
本文是转载虫师博客的文章http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html cookie.session.sessionid 与js ...
- cookie、session、localStorage、sessionStorage的区别
cookie的机制 cookie是存储在用户本地终端上的数据.有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密. Cookie是服务器发 ...
- php 中cookie和session的用法比较
1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session. ...
- Application,Session,Cookie,ViewState,Cache对象用法、作用域的区别
1.Application:用于保存所有用户共用的数据信息.在Asp.Net中类似的配置数据最好保存在Web.config文件中.如果使用Application对象,一个需要考虑的问题是任何写操作都要 ...
- (进阶篇)Cookie与 Session使用详解
1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...
- Cookie和Session简介与区别
1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...
- cookie和session的那些事
对于经常网购的朋友来说,经常会遇到一种情况: 打开淘宝或京东商城的首页,输入个人账号和密码进行登陆,然后进行购物,支付等操作都不需要用户再次输入用户名和密码 但是如果用户换一个浏览器或者等几个小时后再 ...
- Cookie、Session登陆验证相关介绍和用法
一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...
随机推荐
- YTU 2897: E--外星人供给站
2897: E--外星人供给站 时间限制: 2 Sec 内存限制: 128 MB 提交: 20 解决: 13 题目描述 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但 ...
- jqplot配置参考
jqPlot整的来说有三个地方需要配置.格式如: $.jqplot(‘target’, data, options);target:要显示的位置.data:显示的数据.options:其它配置 ...
- bzoj 3481 DZY loves math —— 反演+Pollard_rho分解质因数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3481 推式子:xy % P = Q 的个数 由于 0 <= x,y < P,所以 ...
- CF 809 D Hitchhiking in the Baltic States —— 思路+DP(LIS)+splay优化
题目:http://codeforces.com/contest/809/problem/D 看题解,抄标程...发现自己连 splay 都快不会写了... 首先,题目就是要得到一个 LIS: 但与一 ...
- 使用VirtualBox虚拟机搭建局域网
参考资料: http://www.awaimai.com/995.html https://my.oschina.net/cofecafe1/blog/206535 最近公司局域网网络改造,在改造前已 ...
- Luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows 【区间dp】By cellur925
题目传送门 做完A Game以后找道区间dp练练手...结果这题没写出来(哭). 和A Game一样的性质,从两边取,但是竟然还有天数,鉴于之前做dp经常在状态中少保存一些东西,所以这次精心设计了状态 ...
- 搜索刷题记录by cellur925
我好菜啊!连暴搜都不会! 注意边界退出! 特开此帖,记录搜索学习之路!(逃) 1.全排列 2.八皇后 3.数的划分 由于此题有同一划分方法算一个的限制,我们为了避免搜多,可以使搜出的结果满足单调不降性 ...
- Centos 下php安装配置xdebug扩展
2018年05月02日 19:54:42 杨汉松 阅读数:44 1.下载安装xdebug 获取xdebug wget http://www.xdebug.org/files/xdebug-2.3. ...
- [POI2007]办公楼biu
Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决 ...
- poj 2632 Crashing Robots 模拟
题目链接: http://poj.org/problem?id=2632 题目描述: 有一个B*A的厂库,分布了n个机器人,机器人编号1~n.我们知道刚开始时全部机器人的位置和朝向,我们可以按顺序操控 ...