Django中 cookies and session的使用
-
http协议
- 两个特性:
- 无连接:一次请求一次响应就断开。
- 无状态:不记住上次连接的信息,每次连接都是新的连接。
- 后面出现:短连接(keep-alive)
-
cookie:会话跟踪(解决http协议无状态)
what:浏览器技术。。。。
-
规范:
- 大小上限为4kb
- 一个服务器最多在客户端浏览器上保存20个cookie
- 一个浏览器最多保存300个cookie,因为浏览器可以访问多个服务器。
- 一个用户:一个浏览器:一个服务端
-
Django中使用:ret.set_cookie(‘k1‘,‘v1‘) from django.shortcuts import render,HttpResponse,redirect
def wraper(f):
def inner(request,*args,**kwargs):
is_login = request.COOKIES.get('is_login')
if is_login == 'True':
ret = f(request,**kwargs)
return ret
else:
# return redirect('login')
return HttpResponse('滚犊子')
return inner
@wraper
def index(request):
return render(request,'index.html')
def login(request):
if request.method == 'GET':
return render(request,'login.html')
else:
username = request.POST.get('username')
password = request.POST.get('password')
print(username,password)
if username == 'hqq' and password == '123':
ret = redirect('index')
ret.set_cookie('is_login','True')
return ret
else:
return redirect('login')
-
session table:django_session
session_key 123ssfjasld
session_data {'username':'hqq'}加密后数据 from django.shortcuts import render,redirect
def login_decorator(f):
def inner(request,**kwargs):
if request.session.get('is_login') == True:
ret = f(request,**kwargs)
return ret
else:
return redirect('login')
return inner
def login(request):
if request.method == 'GET':
return render(request,password)
if username == 'hqq' and password == '123':
# from django.conf import settings
# from django.conf import global_settings
# settings.SESSION_COOKIE_NAME
request.session['is_login'] = True
request.session['username'] = 'chao'
"""
1.生成了sessionid:随机字符串;
2.在cookie里面加上了一个键值对,session_id:zdfafdsf;
3.将用户的数据进行了加密,并保存到了django-session表里。
session_key session_data
assdfsfds 用户数据加密后的字符串
"""
return redirect('home')
else:
return redirect('login')
@login_decorator
def home(request):
# print(request.session)
# <django.contrib.sessions.backends.db.SessionStore object at 0x10d3b1e48>
is_login = request.session.get('is_login')
print(is_login) # bool值的True
"""
1.从cookie里面拿出了session_id:xxx这个随机字符串
2.去django-session表里查询到对应的数据
3.反解加密的用户的数据,并获取用户需要的数据
"""
return render(request,'home.html')
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|