官方理解:cookie机制,我来为大家讲解一下关于Cookies和Session的区别和理解?跟着小编一起来看一看吧!
Cookies和Session的区别和理解
官方理解:
cookie机制
Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies 。
具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。
1.状态保持
· http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
· 客户端与服务器端的一次通信,就是一次会话
· 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
· 存储方式包括cookie、session,会话一般指session对象
· 使用cookie,所有数据存储在客户端,注意不要存储敏感信息
· 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
· 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
· 注意:不同的请求者之间不会共享这个数据,与请求者一一对应
2.启用session(举例Django)
· 使用django-admin startproject创建的项目默认启用
· 在settings.py文件中
项INSTALLED_APPS列表中添加:
'django.contrib.sessions',
项MIDDLEWARE_CLASSES列表中添加:
'django.contrib.sessions.middleware.SessionMiddleware',
· 禁用会话:删除上面指定的两个值,禁用会话将节省一些性能消耗
3.使用session
· 启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象
· get(key, default=None):根据键获取会话的值
· request.session.get(‘uname’,’’)
· clear():清除所有会话
· flush():删除当前的会话数据并删除会话的Cookie
· del request.session['uname']:删除会话
4.会话过期时间
· set_expiry(value):设置会话的超时时间
· 如果没有指定,则两个星期后过期
· 如果value是一个整数,会话将在values秒没有活动后过期
· 若果value是一个timedelta对象,会话将在当前时间加上这个指定的日期/时间过期
· 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
· 如果value为None,那么会话永不过期
,