zoukankan      html  css  js  c++  java
  • Django组件-cookie与session

    会话路径技术使用Cookiesession或完成:

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

    Cookie概述:

      在HTTP中它表示服务器送给客户端浏览器的小甜点。Cookie是 key-value 结构,类似于一个python中的字典,随着服务器端的响应发送给客户端浏览器,然后客户端浏览器会把cookie保存起来,当下一次再访问服务器时把cookie再发送给服务器,cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存cookie,并会标注出cookie的来源(哪个服务器的cookie)。当客户端向服务器发出请求时会把所有这个服务器cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了。

    cookie规范:

      1,cookie大小上限为4KB

      2,一个服务器最多再客户端浏览器上保存20个cookie.

      3,一个浏览器最多保存300个cookie.

      注意:不同浏览器之间时不共享cookie的。也就是说在你是用IE访问服务器时,服务器会把cookie发给IE,然后有IE保存起来,当你在使用FireFox访问服务器时,不可能把IE保存的cookie发送给服务器。

    cookie与HTTP头:

      cookie是通过HTTP请求和响应头在客户端和服务器端传递的:

      Cookie:请求头,客户端发送给服务器端。

      格式:cookie:a = A;b = B; c = C。即多个cookie用分号离开;set_cookie:响应头,服务器端发送给客户端。

      一个cookie对象一个set_cookie:set_cookie:set_cookie : a = A set_cookie:b =B set_Cookie: c = C

    cookie的覆盖:

      如果服务器发送重复的cookie那么会覆盖原有的cookie,例如客户端的第一个请求服务器端发送的cookie是:set_cookie:a = A;第二次请求服务器端发送的是:set_cookie:a = AA,那么客户端只留下一个cookie,即a = AA。

    django中的cookie语法:

      设置cookie:

    obj = redirect("/index/")
                obj.set_cookie("is_login",True)
                obj.set_cookie("username",username)
                return obj
    
    
    
    # 也可以用可以加密盐
    #  obj.set_signed_cookie(key,value,salt="加密盐)

    源码:

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

      获取cookie:

    request.COOKIES.get(“键名”)

      删除cookie:

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

    session:

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

    Django中的session语法:

    1、设置Sessions值
              request.session['session_name'] ="admin"
    2、获取Sessions值
              session_name = request.session["session_name"]
    3、删除Sessions值
              del request.session["session_name"]
    4、flush() 
         删除当前的会话数据并删除会话的Cookie。
         这用于确保前面的会话数据不可以再次被用户的浏览器访问
    5、get(key, default=None)
      
    fav_color = request.session.get('fav_color', 'red')
      
    6、pop(key)
      
    fav_color = request.session.pop('fav_color')
      
    7、keys()
      
    8、items()
      
    9、setdefault()
      
      
    10 用户session的随机字符串
            request.session.session_key
       
            # 将所有Session失效日期小于当前日期的数据删除
            request.session.clear_expired()
       
            # 检查 用户session的随机字符串 在数据库中是否
            request.session.exists("session_key")
       
            # 删除当前用户的所有Session数据
            request.session.delete("session_key")
       
            request.session.set_expiry(value)
                * 如果value是个整数,session会在些秒数后失效。
                * 如果value是个datatime或timedelta,session就会在这个时间后失效。
                * 如果value是0,用户关闭浏览器session就会失效。
                * 如果value是None,session会依赖全局session失效策略。

      

      session配置:

    Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
       
    a. 配置 settings.py
       
        SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
           
        SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
        SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
        SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
        SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
        SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
        SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
        SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
        SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)

      

  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/stfei/p/9271487.html
Copyright © 2011-2022 走看看