session与cookie
session与cookie的相同点:
cookie和session都是能够保存顾客状态的技术,尽管两者属于不同的技术,但是只要cookie能够做到的,session也能够做到。
session运行机制:
Session 是存放在服务器端的,类似于Session结构来存放用户数据当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。
session的客户端实现形式:
Session的客户端实现形式(即Session ID的保存方法)
一般浏览器提供了两种方式来保存,还有一种是程序员使用html隐藏域的方式自定义实现:
[1] 使用Cookie来保存,这是最常见的方法,本文“记住我的登录状态”功能的实现正式基于这种方式的。服务器通过设置Cookie的方式将Session ID发送到浏览器。如果我们不设置这个过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。如果我们设置这个时间为若干天之后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服务器上。
[2] 使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置Cookie过期时间是一样的。
[3] 第三种方式是在页面表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方式发送数据,后者使用POST方式发送数据。但是明显后者比较麻烦。
session与cookie的区别:
1.存取方式
session保存在服务器端,过期session服务器会清理;
cookie保存在客户端,删除的操作必须由客户端来操作;虽然浏览器会按要求删除cookie,但是也有例外,例如:流氓浏览器,浏览器意外退出。
2.安全性
cookie数据存储在客户端,容易被篡改;但只要不存储敏感数据就行,cookie也可以加密保存。
session虽然存储在服务器端,但是并没有太大的优越感。
3.有效期
session可以严格控制过期时间,默认关闭浏览器就消失。可以利用cookie来延长过期时间。
cookie由客户端决定,并且不能特别精准,但是可以长期有效,比如10年。。。
4.效率
session保存在服务器端,读写都需要消耗资源;
cookie保存在客户端,效率相对更高,但是流量走的也更多一点。
其实在目前的架构下,效率都不是问题,session也可以通过session存入数据库,或者使用内存缓存等技术,提高效率。cookie一般也只保存很少的关键数据,而不是滥用。
5.浏览器禁用cookie
session还可以使用url网址传递,而cookie则只能干瞪眼。
6.跨域
cookie可以跨子域名,session则不能。