Web基础——cookie和session的生存之道

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保存在内存。

猜你喜欢

转载自www.cnblogs.com/zhihow/p/9815821.html
今日推荐