Session与Cookie是什么
就像你去电商平台购物一样,而网站采用是HTTP协议,它本身就是一个无状态的,是记不住你上次来做了什 么事,那怎么记住每个用户呢。 于是,服务器给每个用户贴了一个小纸条,上面记录了服务器给我们返回的一些信息。然后服务器看到这张 小纸条就知道我们是谁了。
这个小纸条就是Cookie。那么Cookie怎么工作的呢?
-
浏览器第一次访问服务器时,服务器此时肯定不知道它的身份,所以创建一个独特的身份标识数据,格式 为key=value,放入到Set-Cookie字段里,随着响应报文发给浏览器。
-
浏览器看到有Set-Cookie字段以后就知道这是服务器给的身份标识,于是就保存起来,下次请求时会自动 将此key=value值放入到Cookie字段中发给服务器。
-
服务器收到请求报文后,发现Cookie字段中有值,就能根据此值识别用户的身份然后提供个性化的服务。

有了Cookie实现了有状态这一需求,那为什么又来一个Session呢?
试想一下,如果将用户账户的一些信息都存入Cookie中的话,一旦信息被拦截,那么所有的账户信息都会可 能被泄露丢,这是不安全的。所以就出现了Session,在一次会话中将重要信息保存在Session中,浏览器只 记录SessionId一个SessionId对应一次会话请求。

Django使用Session

在settings.py配置文件中设置客户端Cookie:

在视图中操作Session:

自己实现用户登录认证
案例:自己实现登录认证机制
-
登录
-
视图验证登录
from devops2.user_login import login_decorator
@login_decorator def index(request): return render(request,'index.html')
def login(request): if request.method =='GET': return render(request,'login.html') elif request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') """ ###############内置认证机制################ #验证用户 user = auth.authenticate(username=username,password=password) #验证通过返回用户名,否则返回None
if user: auth.login(request,user) #将request与用户对象(包含session)传给login()函数 request.session['username'] = username #往session临时存储数据 return redirect('/') #跳转到首页 else: msg = '用户名或密码错误' return render(request,'login.html',{'msg':msg}) """
user_obj = User.objects.get(user=username) if user_obj.user: if user_obj.password == password: request.session['is_login'] = True request.session['username'] = username return redirect('/') else: msg = '用户名或密码错误!' return render(request, 'login.html', {'msg': msg}) else: msg = '用户名或密码错误!' return render(request, 'login.html', {'msg': msg})
|
- 退出登录
def logout(request): request.session.flush() return redirect('/login')
|
- 装饰器
from django.shortcuts import redirect
def login_decorator(func): def inner(request): is_login = request.session.get('is_login',False) if is_login: return func(request) else: return redirect('/login') return inner
|