会话跟踪
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
Cookie
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。
通讯过程:
- 1.客户端发送一个http请求到服务器端
- 2.服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
- 3.客户端发送一个http请求到服务器端,其中包含Cookie头部
- 4.服务器端发送一个http响应到客户端
其实本质上cookies就是http的一个扩展
cookie.png
1 设置Cookie
可以通过HttpResponse对象中的set_cookie方法来设置cookie。
HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
-
max_age单位为秒,默认为None。如果是临时cookie,可将max_age设置为None。
示例:
# 1.设置cookie(服务端产生的)使用响应对象设置->返回给浏览器->特点:1.键值对的形式储存2.同源策略,域名安全
def cookie_views(request):
response = HttpResponse('HELLO WORLD!')
response.set_cookie('name', value='YuHao', max_age=None)
return response
2 读取Cookie
可以通过HttpRequest对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES为字典类型。
# 2.获取cookie->通过HttpRequest的COOKIES属性来读取请求中的cookie信息(临时性的数据)->
# 第一次请求的时候把cookie信息返回给浏览器->再次请求会把cookie信息保存在浏览器中
def get_cookie(request):
name_ = request.COOKIES.get('name')
print(name_)
return HttpResponse('HELLO WORLD!')
Cookie的特点
- Cookie以键值对的格式进行信息的存储。
- Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问yuhao.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到yuhao.cn写的Cookie信息。
- 当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。
Session
- 对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息
- 在服务器端进行状态保持的方案就是Session
- Session依赖于Cookie
Session操作
# 1.session数据设置/读取/删除
# session的储存形式:{'sessionID:{key:value}'}
def set_session(request):
# 1.设置session
request.session['name'] = 'YuHao'
request.session['It'] = 'python'
# 2.获取session
value = request.session.get('name')
print(value)
# 3.删除session
# request.session.clear()
# 4.删除redis储存的session所有的数据
# request.session.flush()
# 5.删除指定的session数据(根据key键的形式)
# del request.session['It']
return HttpResponse('HELLO WORLD!')
Cookie与Session的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上;
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
- 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;