一、session与cookie的区别
session:Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。由于Session存放在服务器端,所以随着时间的推移或者用户访问的增多,会给服务器增加负担。使用的时候要考虑下服务器的性能。
cookie:Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。由于Cookie是存放在客户端,是可见的,安全性就会很低。因此不建议将一些重要的信息放在cookie中。
区别:
- cookie存放在客户端,session存放在服务器端
- cookie不是很安全,别人可以分析你本地的cookie信息进行cookie欺骗,因此重要信息应考虑保存在服务器端
- session一定时间内回报存在服务器端,当访问量增大时,会影响服务器性能,从性能方面考虑应使用cookie
- 不同浏览器对cookie的数据大小限制不同,个数限制也不同
- 可以考虑将登陆信息等重要信息存放为session,不重要的信息可以放在cookie中
联系:
- 都是用来记录用户的信息,以便让服务器分辨不同的用户
- 可以搭配使用,但都有自己的使用局限,要考虑到安全和性能的问题
二、如果客户端禁止 cookie,session 还能用吗?
如果浏览器禁止cookie,那么客户端访问服务端时无法携带sessionid,服务端无法识别用户身份,便无法进行会话控制,session失效。但可以通过以下几种方法:
- URL重写:URL重写要求将站点中的所有超链接都进行改造,在超链接后用一个特殊的参数JSESSIONID保存当前浏览器对应session的编号,这样一来,当用户点击超链接访问服务器时,服务器可以从URL后的参数中分析出JSESSIONID,从而找到对应的sesison使用.
- 用文件、数据库等形式保存Session ID,在跨页过程中手动调用