http協議html
cookie:會話跟蹤(解決http協議無狀態)python
what:首先來說,cookie是瀏覽器的技術,Cookie具體指的是一段小信息,它是服務器發送出來存儲在瀏 覽器上的一組組鍵值對,能夠理解爲服務端給客戶端的一個小甜點,下次訪問服務器時瀏覽器會自動攜帶這些鍵值對,以便服務器提取有用信息。django
規範:瀏覽器
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, *args, **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')
sessioncookie
table:django_session session_key 123ssfjasld session_data {'username':'hqq'}加密後數據
from django.shortcuts import render,HttpResponse,redirect def login_decorator(f): def inner(request, *args, **kwargs): if request.session.get('is_login') == True: ret = f(request, *args, **kwargs) return ret else: return redirect('login') return inner 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': # 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')