django组件-cookie与session

会话跟踪技术

在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个绘画中的请求如下:

请求银行主页:

  - 请求登陆(请求参数是用户名和密码);

  - 请求转账(请求参数与转账相关的数据);

  - 请求信誉卡还款(请求参数与还款相关的数据)

我们必须在一个会话过程中有共享数据的能力

我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术。

Cookie  

Cookie是key-value结构,类似于一个python中的字典,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。

当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了。

  - Cookie大小上限为4KB;

  - 一个服务器最多在客户端浏览器上保存20个Cookie;

  - 一个浏览器最多保存300个Cookie;

以上数值不定

如果服务端发送重复的Cookie那么会覆盖原有的Cookie,例如客户端的第一个请求服务端发送的Cookies是:Set-Cookie:a=A;第二请求服务端发送的是:Set-Cookie: a=AA,那么客户端只留下一个Cookie,即:a=AA.

设置Cookie:

1 rep = HttpResponse(...) 或 rep = render(request, ...) 或 rep = redirect()
2   
3 rep.set_cookie(key,value,...)
4 rep.set_signed_cookie(key,value,salt='加密盐',...) 

属性:

 1 '''
 2 class HttpResponseBase:
 3 
 4         def set_cookie(self, key,                 键
 5                      value='',            值
 6                      max_age=None,        超长时间 
 7                               cookie需要延续的时间(以秒为单位)
 8                               如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止。
 9 
10                      expires=None,        超长时间
11                                  expires默认None ,cookie失效的实际日期/时间。 
12                                 
13 
14                      path='/',           Cookie生效的路径,
15                                                  浏览器只会把cookie回传给带有该路径的页面,这样可以避免将
16                                                  cookie传给站点中的其他的应用。
17                                                  / 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
18                      
19                              domain=None,         Cookie生效的域名
20                                                 
21                                                   你可用这个参数来构造一个跨站cookie。
22                                                   如, domain=".example.com"
23                                                   所构造的cookie对下面这些站点都是可读的:
24                                                   www.example.com 、 www2.example.com 
25                                  和an.other.sub.domain.example.com 。
26                                                   如果该参数设置为 None ,cookie只能由设置它的站点读取。
27 
28                      secure=False,        如果设置为 True ,浏览器将通过HTTPS来回传cookie。
29                      httponly=False       只能http协议传输,无法被JavaScript获取
30                                                  (不是绝对,底层抓包可以获取到也可以被覆盖)
31                   ): pass
32 
33 '''

获取Cookie:

1 request.COOKIES  

删除Cookie:

1 response.delete_cookie("cookie_key",path="/",domain=name)

session

session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所有用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问该服务器中的其他web资源时,其他web资源再从各自的session中取出数据为用户服务。

语法

1 1、设置Sessions值
2           request.session['session_name'] ="admin"
3 2、获取Sessions值
4           session_name = request.session["session_name"]
5 3、删除Sessions值
6           del request.session["session_name"]
7 4、flush()
8      删除当前的会话数据并删除会话的Cookie。
9      这用于确保前面的会话数据不可以再次被用户的浏览器访问

 

posted @ 2018-11-01 16:54  阵浊秀  阅读(94)  评论(0编辑  收藏  举报