day22-django session 原理

一、session介绍

  我们知道,之前我们是用cookie做用户验证的,但是这样不安全,为啥说不安全呐?因为基于cookie做用户验证的时候,敏感信息不适合放在cookie中,不然会很容易拿着你的信息去干很多坏事的。所以我们这边要用session,那session是什么鬼呐?

  1. cookie 是保存在用户浏览器端的键值对
  2. 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 makemigrations
 
D:\PycharmProjects\51home\sday21>python manage.py migrate

session在数据 django_session的数据表中:

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

 

posted @ 2018-07-23 13:23  东郭仔  阅读(568)  评论(0)    收藏  举报