day21-session介绍和原理
一、session介绍
我们知道,之前我们是用cookie做用户验证的,但是这样不安全,为啥说不安全呐?因为基于cookie做用户验证的时候,敏感信息不适合放在cookie中,不然会很容易拿着你的信息去干很多坏事的。所以我们这边要用session,那session是什么鬼呐?
- cookie 是保存在用户浏览器端的键值对
- session 是保存在服务器端的键值对
session = {
随机字符串:
用户信息
}
所以,session其实就是一个大的字典,用户来了之后,在本地生成一个随机字符串,这个随机字符串作为key,用户信息作为value,当然这个数据也会在数据库存一份
二、session原理图
三、session设置
3.1、url的设置
说明:首先我们跟往常一样,添加函数login和index的url
from django.urls import path from app01 import views urlpatterns = [ path('login/', views.login), path('index/', views.index), ]
3.2、view.py的代码
说明:编写login和index的函数
from django.shortcuts import render,redirect,HttpResponse
def login(request):
if request.method == "GET":
return render(request,'login.html')
elif request.method == "POST":
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'root' and pwd == "123":
#生成随机字符串
# 写到用户浏览器cookie
# 保存到session
# 在随机字符串对应的字典中设置相关内容...
request.session['username'] = user #以上4步,django一次帮你做完
request.session['is_login'] = True
return redirect('/index/')
else:
return render(request,'login.html')
def index(request):
#获取当前用户的随机字符串
#根据随机字符串获取对应的信息
if request.session["is_login"]:
return HttpResponse(request.session['username'])
else:
return HttpResponse('滚')
3.3、templates的login.html
<body> <form method="post" action="/login/"> <input type="text" name="user" placeholder="用户名"> <input type="password" name="pwd" placeholder="密码"> <input type="submit" value="登录"> </form> </body>
四、查看session信息
4.1、客户端
说明:登录完成之后在本地cookie中记录你的session的key值,这个可以值就是session的django内部生成的随机字符串。
4.2、服务端session值
说明:在保存session的时候是记录你的数据库的,所以在登录之前一定要执行数据库初始化操作即:
D:\PycharmProjects\51home\sday21>python manage.py makemigrations D:\PycharmProjects\51home\sday21>python manage.py migrate
session在数据 django_session的数据表中:
session_data的数据时保存在username = root和is_login=True的一次加密。