day22-django session 原理
一、session介绍
我们知道,之前我们是用cookie做用户验证的,但是这样不安全,为啥说不安全呐?因为基于cookie做用户验证的时候,敏感信息不适合放在cookie中,不然会很容易拿着你的信息去干很多坏事的。所以我们这边要用session,那session是什么鬼呐?
- cookie 是保存在用户浏览器端的键值对
- session 是保存在服务器端的键值对
session = {
随机字符串:
用户信息
}
所以,session其实就是一个大的字典,用户来了之后,在本地生成一个随机字符串,这个随机字符串作为key,用户信息作为value,当然这个数据也会在数据库存一份
二、session原理图

三、session设置
3.1、url的设置
1 from django.contrib import admin 2 from django.urls import path 3 from app01 import views 4 5 urlpatterns = [ 6 path('admin/', admin.site.urls), 7 path("login/",views.login), 8 path("index/",views.index), 9 ]
3.2、view.py的代码
说明:编写login和index的函数
1 from django.shortcuts import render,redirect,HttpResponse 2 3 # Create your views here. 4 5 6 7 def login(request): 8 if request.method=="GET": 9 return render(request,"login.html") 10 elif request.method=="POST": 11 user=request.POST.get("user") 12 pwd=request.POST.get("pwd") 13 if user=="root" and pwd =="123": 14 #生成随机字符串 15 #写到浏览器 cookie 16 #保存到session 17 #在随机字符串对应的字典中设置相应的内容 18 request.session["username"]=user 19 request.session["is_login"]=True 20 return redirect("/index/") 21 else: 22 error_msg="用户密码错误" 23 return render(request,"login.html",{"error_msg":error_msg}) 24 25 26 def index(request): 27 if request.session.get("is_login"): 28 return HttpResponse("login ok") 29 else: 30 return HttpResponse("GET OUT")
3.3、templates的login.html
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 9 <form action="/login/" method="post"> 10 <input type="text" name="user"> 11 <input type="text" name="pwd"> 12 <input type="submit" value="提交"> 13 <input type="reset" value="取消"> 14 15 </form> 16 <span>{{ error_msg }}</span> 17 </body> 18 </html>
四、查看session信息
4.1、客户端
说明:登录完成之后在本地cookie中记录你的session的key值,这个可以值就是session的django内部生成的随机字符串。

4.2、服务端session值
说明:在保存session的时候是记录你的数据库的,所以在登录之前一定要执行数据库初始化操作即:
|
1
2
3
|
D:\PycharmProjects\51home\sday21>python manage.py makemigrationsD:\PycharmProjects\51home\sday21>python manage.py migrate |
session在数据 django_session的数据表中:

session_data的数据时保存在username = root和is_login=True的一次加密。

浙公网安备 33010602011771号