Django cookie session

什么是cookie
cookie是浏览器的技术,cookie指一小段信息,它是服务器发送出来,存储在浏览器上的键值对,可以理解为服务端给客户端的一个令牌,下次访问服务器时浏览器会自动带上这块令牌,以便服务器提取有用信息
原理:
    浏览器访问服务器时,带有一个空的cookie,服务器产生内容,浏览器收到这个产生的值后保存在本地,当浏览器再次访问服务器时会自动带上这个有值的cookie,这样服务器就能知道这次访问的是谁了。cookie在这里相当于身份证,第一次时,先给你办个身份证,下次再次访问就知道是谁来了。
    
cookie 与HTTP头
    cookie是通过HTTP请求和响应在客户端和服务端传递的。
    cookie 请求头,客服端发送给服务端
    格式: cookie: a =A; b=B; c=C.
    如果发送多个cookie,后面的cookie会覆盖先发的cookie

Django中操作cookie
    获取cookie
    request.COOKIES['key']
    request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
    参数:
        default: default value
        salt: 加密盐
        max_age: 后台控制过期时间
    设置cookie
    rep = HttpResponse()
    rep = render(request,'')
    rep.set_cookie(key, value)
    rep.set_signed_cookie(key, value, salt='‘,max_age=None,)
    参数:
    key:key
    value:value
    max_age=None,
    path='/', cookie生效的路径,/根路径,要路径的cookie表示可以被任何url页面访问
    domain =none, 生效的域名
    secure=False, https传输
    httponly=False ,只能http协议传输,无法被js获取
    
    删除cookie
    def logout(request):
        rep = redirect('/login/')
        rep.delete_cookie('user')
        return rep
    
session
    cookie在一定程度上解决了 保持状态 的需求,但是由于cookie本身最大支持4096字节,且保存在客户端,可能被拦截或者窃取。 需要更多的字节,并且保存的服务器,这就是session.
    这里cookie就起到了桥接的作用,通过给每个客户端分配一个唯一的id,保存在cookie中,然后根据这个唯一的id,在服务器在上保存一段时间的私密资料。比如账号密码等。
    
    在Django中操作session
    获取,设置,删除session
    取值:
        request.session['k1']
        request.session.get('k1',None) 
        reqeust.session帮你从cookie里面将sessionid的值取出来,这个值在数据库的session表中,session-data字段的数据拿出来,并解密, 然后通过['k1']或者get()方法取出其中保存的字段的值
        
    删除值:
    del request.session['k1'] django-session表里面同步删除。
    
    其他操作:所有键值对
    request.session.keys()
    reqeust.session.values()
    request.session.items()
    
    session_key = request.session.session_key # sessionid
    request.session.clear_expired() # 将过期的删除
    
    request.session.exists('session_key') # 查看某个key是否存在于数据库中
    request.session.flush() # 删除当前的会话数据并删除cookie, 删除session中这个会话记录
    
    request.session.set_expiry(value)
        value 
        整数:指定秒数后失效
        datetime, timedelta, 这个时间后失效
        0 关闭浏览器后失效
        None 依赖全局session失效策略
        
    Django中session的配置
    1. 数据库Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
    
    2. 缓存Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
    SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    
    3. 文件Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
    SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 
    
    4. 缓存+数据库
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎
    
    5. 加密Cookie Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎
    
    其他公用设置项:
    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,默认修改之后才保存(默认)

jquery 操作cookie

定义:让网站服务器把少量数据存储到客户端硬盘或内存。
jquery.cookie.js基于jquery, 必须先引入jquery.
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.cookie.js"></script>
 
添加一个cookie
$.cookie('the_cookie', 'the_value');
这里没有设置cookie有效时间,所创建的cookie有效期默认到用户关闭浏览器为止。

创建一个cookie并设置有效时间为7天
$.cookie('the_cookie','the_value',{expires:7}); 单位为7天

创建一个cookie并设置cookie的有效路径
$.cookie('the_cookie','the_value', {expires:7, path:'/'});

读取cookie
$.cookie('the_cookie');

删除cookie
$.cookie('the_cookie',null); 将cookie值设置为null

可选参数
expires: 设置一个整数时,单位是天,也可以设置一个日期对象
path: 创建cookie的页面的路径
domain: 创建该cookie的页面域名
secure: 如果设为true,那么此cookie的传输会要求一个安全协议,如https
 

上一篇:Django 表单API

下一篇:Django 文件上传