Cookie与Session
Cookie:
cookie是保存在浏览器端的键值对,可以用做登录
1.保存在用户浏览器
2.可以主动清除
3.可以被“伪造”
4.跨域名cookie不共享
5.浏览器设置不接收cookie
服务端设置Cookie
v=datetime.datetime.utcnow() + datetime.timedelta(seconds=10)
#设置cookie超时时间,系统默认一个时间,也可以用此方式添加一个时间,但以系统默认时间为基准。
obj.set_cookie('k1','v1',max_age=10,expires=v,path="",domain="",secure=False,httponly=False)
#max_age时间周期,给某个url生效设置cookie,如果path="/"表示全局生效。
#domain参数:用域名设置访问权限
secure参数(证书访问)执行https的cookie设置等操作的时候用ture
httponly参数:(安全)禁止了js使用时获取cookies,仅仅Http网络传输使用
获取cookie数据:.request_COOKIES.get()
cookie:
客户端可修改
服务端也可修改
保存在客户端
cookie 应用:
登录认证:
普通的cookie:
敏感信息,不适于放在cookie中,放在数据库中,频繁操作数据库
签名的cookie(可能会被解密):
加密的cookie使用(签名):
.set_signed_cookie()
解密数据:request.get_signed_cookie()
cookie时做认证的时候,将不敏感的信息放在cookie中,频繁操作数据库
Session :
session都是request操作的,session是保存在服务器上的键值对,依赖于cookie
1.设置session
request.session['key'] = value
request.session.setdefault(key,value)#存在就不设置
2. 获取session
request.session['key']
request.session.get(key,'')
3. 删除session
request.session.pop(key) #删除某一个键值对
del request.session['key']
request.session.delete() #删除所有的session键值对
request.session.flush() #删除所有的session键值对.删除了cookie
4. 设置超时时间
request.session.set_expiry()
5. 清除当前过期的session
request.session.clear_expired()
用户session的随机字符串(key):request.session.session_key
将所有session失效日期小于当前日期的数据删除:request.session.clear_expired()
检查用户session的随机字符串 在数据库中是否存在:request.session.exists("session_key")
删除当前用户的所有session数据:request.session.delete()
删除当前用户的数据并删除Session的Cookie:request.session.flush()
确保用户前面的数据不可以再次被用户的浏览器访问,调用函数:django.contrib.auth.logout()
注:设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
(1).如果value是个整数,session会在些秒数后失效。
(2).如果value是个datatime或timedelta,session就会在这个时间后失效。
(3).如果value是0,用户关闭浏览器session就会失效。
(4).如果value是None,session会依赖全局session失效策略。
6,流程:浏览器首次访问服务器的时候没有cookie,然后访问服务器,服务器会生成一个session_ID字典,
字典的值为浏览器的数据和cookie(一个随机字符串),然后返回session_ID给浏览器,下次浏览器再来的时
候携带session_ID访问服务器,可以唯一找到对应的服务器存储的session,并且打开这个字典,并从中取到
值做对应校验,检验是否正确能否访问
注:一个session对应一个cookie,并且一个浏览器对应一个session数据
session存在数据库中,默认存在django_session表中,也可以存在一个文件当中,或者缓存当中,这个取决于自设定.