cookie:
1,cookie是什么?
cookie是服务器让浏览器保存在浏览器上的一组键值对
2,为什么要有cookie?
http 是无状态,每次请求之间没有任何关系,无法保持状态
3,cookie的特点:
1,服务器让浏览器设置的
2,设置之后每次访问相同的页面带上cookie
4,django中的操作cookie
1,设置cookie
rep = redirect('/idnex/')
rep.set_cookie(key,value,max_age=1000)
rep.set_signed_cookie(key,value,max_age=1000)
2,获取cookie
request.COOKIES['key']
request.COOKIES.get['key']
request.get_signed_cookie('key',salt='')
3,删除cookie
rep.delete_cookie('key')
session
什么是session?
session是保存在服务器上的键值对,依赖于cookie
为什么要有sessiion
cookie在浏览器上不安全
cookie长度受限制
djagno中操作session
设置session
request.session['key'] = vlue
request.session.setdefault(key,value)
获取session
request.session['key']
删除session
request.session.pop(key)
del request.session['key']
request.session.delete()只是清空session
request.session.flush()同时删除cookie和sessoin
设置超时时间
request.session.set_expiry()
设置当前过期的session
request.session.clear_expired()
其他配置
2,特性:
是服务让浏览器设置的,浏览器有权利不设置
访问其他页面的时候携带着cookie
能干什么
登录
seddion
1,保存在服务器上的键值对
2,一个cookie 对应 一个 session
流程:
1. 给首次登录的用户设置一个cookie session:asdasdasasdasdas
2. 开辟一块空间存session
3. session中存要存的数据(键值对)
4. 返回给浏览器cookie
# 设置session
request.session['is_login'] = 'True'
# 获取session
request.session.get('is_login', '')
获取cookie
request.COOKIES['key']
request.get_signed_cookie('key',default=RAISE_ERROT,salt='',max_age=None)
get_sined_cookie方法的参数
default 默认值
salt 加密盐
max_age 后台控制过期时间
设置Cookie
rep = HttpResponse()
rep = rrender(request,.....)
rep.set_cookie(key,value,....)
rep.set_signed_cookie(key,value,salt='加密盐')
key:键
value=,值
max_age = None 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
删除Cookie
def logiout(request):
rep = redirect('/login/')
rep.delete_cookie('user')
return rep
cookie版登录:
def check_login(func):
@wraps(func)
def inner(request, *args, **kwargs):
next_url = request.get_full_path()
if request.get_signed_cookie("login", salt="SSS", default=None) == "yes":
# 已经登录的用户...
return func(request, *args, **kwargs)
else:
# 没有登录的用户,跳转刚到登录页面
return redirect("/login/?next={}".format(next_url))
return inner
def login(request):
if request.method == "POST":
username = request.POST.get("username")
passwd = request.POST.get("password")
if username == "xxx" and passwd == "dashabi":
next_url = request.GET.get("next")
if next_url and next_url != "/logout/":
response = redirect(next_url)
else:
response = redirect("/class_list/")
response.set_signed_cookie("login", "yes", salt="SSS")
return response
return render(request, "login.html")
cookie版登录
Session 用request调用
1,加密
2,数据量大
流程:
1. 给首次登录的用户设置一个cookie session:asdasdasasdasdas
2. 开辟一块空间存session
3. session中存要存的数据(键值对)
4. 返回给浏览器cookie
# 设置session
request.session['is_login'] = 'True'
# 获取session
request.session.get('is_login', '')
# 获取、设置、删除Session中数据
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在则不设置
del request.session['k1']
# 所有 键、值、键值对
request.session.keys()