zoukankan      html  css  js  c++  java
  • django cookie、session

    Cookie、Session简介:

    Cookie、Session是一种会话跟踪技术,因为http请求都是无协议的,无法记录上一次请求的状态,所以需要cookie来完成会话跟踪,Seesion的底层是由Cookie实现的。

    Cookie概述

    服务器端设置Cookie,发送给客户端浏览器,客户端保存Cookie。当在Cookie有效期内,当客户端再次访问 Cookie在该服务器上的有效路径时,客户端会把该Cookie值保存在请求头上发送给服务区。

    Cookie规范

    • Cookie大小上限为4KB;
    • 一个服务器最多在客户端浏览器上保存20个Cookie;
    • 一个浏览器最多保存300个Cookie;
    • 上面的数据只是HTTP的Cookie规范,但在浏览器大战的今天,一些浏览器为了打败对手,为了展现自己的能力起见,可能对Cookie规范“扩展”了一些,例如每个Cookie的大小为8KB,最多可保存500个Cookie等!但也不会出现把你硬盘占满的可能!

    设置cookie

    res = Httpresponse(...)

    res.set_cookie(key,value,...)

    res.set_signed_cookie(key,value,salt=''...) 加了签名的cookie,防止用户私自纂改.

    源码:

    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获取
                                                 (不是绝对,底层抓包可以获取到也可以被覆盖)
                  )
    

    读取Cookie

    request.COOKIES

    删除Cookie

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

    django Session

    Session是服务器端技术,利用这个技术,服务器在运行时可以 为每一个用户的浏览器创建一个其独享的session对象,由于 session为用户浏览器独享,所以用户在访问服务器的web资源时 ,可以把各自的数据放在各自的session中,当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的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,默认修改之后才保存(默认)
  • 相关阅读:
    2018 ACM 网络选拔赛 徐州赛区
    2018 ACM 网络选拔赛 焦作赛区
    2018 ACM 网络选拔赛 沈阳赛区
    poj 2289 网络流 and 二分查找
    poj 2446 二分图最大匹配
    poj 1469 二分图最大匹配
    poj 3249 拓扑排序 and 动态规划
    poj 3687 拓扑排序
    poj 2585 拓扑排序
    poj 1094 拓扑排序
  • 原文地址:https://www.cnblogs.com/LTEF/p/9761118.html
Copyright © 2011-2022 走看看