zoukankan      html  css  js  c++  java
  • 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      这用于确保前面的会话数据不可以再次被用户的浏览器访问
  • 相关阅读:
    增加Tomcat内存大小
    JAVA中的JSON
    js判断中文字符长度
    2016总结
    JavaScript 字符串实用常用操作
    Java文件操作
    hadoop中hbase出现的问题
    static_cast静态类型转换指针导致Release程序随机崩溃报错
    解决: error C2236: 意外的标记“class”。是否忘记了“;”?
    游戏操作杆代码
  • 原文地址:https://www.cnblogs.com/lzmdbk/p/9889688.html
Copyright © 2011-2022 走看看