Cookie And Session
在网络连接中,http请求是无状态的。那么就需要一种会话跟踪技术,用来跟踪用户的整个会话。保证服务器可以确定用户的身份。常用的技术就是Cookie和Session。
一、 Cookie
Cookie是某些网站为了辨别用户身份,进行会话跟踪而储存在用户本地终端上的数据,由用户客户端计算机暂时或永久保存的信息。
- Cookie 是由服务器发送给客户端的特殊信息,以文本的形式保存在客户端。
- 客户端再次请求时,会携带Cookie信息。
- 服务器可以解析Cookie生成与客户端相对应的内容。
Cookie的设置以及发送过程:
浏览器中,Cookie是以键值对的形式保存数据。例如:
Cookie的属性:
name 和value: Cookie以键值对保存。。。。。。 例如下面两幅图,Cookie中每一个键值对在服务端都是一个Cookie对象。
直接贴源码
|
version: 版本 comment: 该Cookie的说明 domain:域名,可以访问该Cookie的域名。如果设置为“.baidu.com",则所有以”baidu.com“结尾的域名都可以访问该Cookie。 maxAge:有效时间,单位秒。为负数时,表示临时Cookie,保存在内存中,不会持久化,关闭浏览器也就没有了。如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。设置为0,表示即时失效删除该Cookie。有一种说法,Cookie设置为 Integer.MAX_VALUE,可使其永久有效,不清楚是否正确,没有验证过。 path:路径, 只在该路径下读取Cookie secure:该Cookie是否仅被使用安全协议传输:安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false |
二、 Session
Session是另一种记录客户状态的机制,Session保存在服务器中。当客户端登录服务器时,服务器把客户端信息以类似散列表的形式保存在服务器上。当客户端再次访问时只需要从表中找到该用户的Session信息即可。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识,称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用,如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以防伪造的字符串,这个session id将被在本次响应中返回给客户端保存。
实现方式:
1. 使用Cookie实现,即在Cookie中保存SessionID。如下图所示:
2.使用URL回写实现,即将JSESSIONID=xxxxxxxxxxxxxxxxxx 拼接在URL参数或附加信息中。
在Java中, Session类位于 javax.servlet.http.HttpSession。通过HttpServletRequest类实体的getSession(Boolean create)获取Session对象。
三、 Cookie和Session的区别
- Cookie保存在客户端中,Session保存在服务器中
- Session比Cookie要安全,毕竟Cookie要在网络中传递
- Session保存在服务器中,就会占用服务器资源。