cookie和session用于实现会话跟踪
http协议是无状态的,即服务器无法知道当前会话是否之前访问过服务器。但是我们开发网站的时候,希望提供个性化的服务,即针对不同的用户(浏览器)提供不同的数据和服务,单纯的http协议显然是无法实现这一点的,那么我们就需要使用到会话跟踪的技术。
会话跟踪技术的实现有两种方式,一种就是通过session和cookie,另一种是url重写技术(就是在url中加入jsessionid来跟踪session)
Session
Session中保存了每个会话的信息,比如登录状态、账号、购物车啥的。但是单纯的session是无法达到个性化服务的:因为http协议的无状态性,当用户访问服务器进行了操作后(比如登录),下一次再访问时客户端无法再跟踪到之前的会话信息。
那么cookie的作用就体现出来了:
Cookie
接着前面的问题,每一次的会话会产生一个session,每个session有一个独一的sessionid,那么我们可以通过保存这个sessionid,在下一次访问的时候,我们就使用这个sessionid来找到之前的会话,那么不就是可以实现会话跟踪了吗。Cookie的作用就是这样,当用户第一次访问服务器时,服务器会在响应报文中添加一个set-cookie字段将当前会话的sessionid传给客户端(set-cookie:jsessionid:…),客户端(浏览器)接收到response后,将cookie键值对(“jsession”,value)存入内存中,下一次再访问该服务器时,即传入对应的cookie内容,那么服务器就可以根据sessionid找到之前的session啦,这样即完成了会话的跟踪。
Cookie中几个比较重要的参数
key, 键
value='', 值
max_age=None, 超时时间 秒 值若为-1:浏览器关闭时cookie即失效0:不会保存cookie 值若大于浏览器被关闭的时间 则cookie会被存入文件中 下次访问对应服务器时即加入浏览器内存使用
expires=None, 超时时间时间戳,到expires设置的时间时失效
path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
session和cookie的区别
保存位置:session保存于服务器端,cookie保存于客户端内存或文件中。
内存cookie和持久cookie
如果设置了有意义的cookie过期时间,那么cookie会被保存到硬盘(win7ie--C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies ,chrome: C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Cache),
否则,cookie保存在内存。