cookie简介
- 1、cookie不属于HTTP协议,可以填补HTTP协议无法保存状态的空缺
- 2、cookie本身最大支持4096字节,本身保存在客户端,安全性较低
- 3、每个客户端cookie分配一个唯一的id,服务器通过cookie的id区分识别用户
- 4、cookie和session是共通性的,不限制于语言和框架
cookie操作
操作 | 语法 |
---|---|
获取cookie | request.COOKIES[key] |
设置cookie | response.set_cookie(key.value) |
session简介
- session是一次浏览器和服务器的交互对话
- session默认在服务端保存15天
- 通过session将cookie信息保存在服务器且有较高的安全性
session操作
操作 | 语法 |
---|---|
获取session | request.session[key] |
设置session | request.session[key] = value |
删除session | del request.session[key] |
session 时效性设定
request.session.set_expiry(value)
- 如果value是整数,session会在对应的秒数后失效
- 如果value是datatime或timedelta,session就会在这个时间后失效
- 如果value是0,用户关闭浏览器session就会失效
- 如果value是None,session会依赖全局session失效策略
综合示例
架构
Mydiange APP templates index.html login.html apps.py views.py Mydjango setting.py urls.py
项目准备
创建项目
django-admin startproject Mydjangocd Mydjangopython manage.py startapp APP
页面信息
index.html
Title 欢迎{ { name }}进入首页!!!
点击进入登录界面
login.html
登录页面
文件配置
apps.py
from django.apps import AppConfigclass AppConfig(AppConfig): name = 'APP'
views.py
# coding=utf8from django.shortcuts import render,redirectdef login(request): #登录页面 print("COOKIE",request.COOKIES) #显示Django自带cookie print("SESSION",request.session) #显示Django自带cookie if request.method == "POST": #判断提交方式 name=request.POST.get("user") #提交的用户名 pwd=request.POST.get("pwd") #提交的密码 if name=="admin" and pwd == "123": #提交用户信息判断 # ret = redirect("/index/",locals()) #转到index的变量,未加cookie认证 【非session形式】 # ret.set_cookie("COOKIEID","uqzy2IjOoOf0OXaz") #添加cookie认证信息,可用于判断用户是否登录 【非session形式】 request.session["CertificationID"]=True #自定义认证ID,用于判断是否登录 request.session["user"]=name #用于判断用户名 request.session.set_expiry(180) #定义session失效时间 return redirect("/index/",locals()) #符合条件转到index页面 return render(request,"login.html",locals()) #不符合条件载入登录界面def index(request): #首页 # if request.COOKIES.get("COOKIEID",None): #通过cookie判断用户是否登录 【非session形式】 # name = "admin" 【非session形式】 if request.session.get("CertificationID",None): #通过session的CertificationID判断是否登录 name=request.session.get("user",None) #判断用户名是否存在 return render(request,"index.html",locals()) #符合条件载入index页面 else: return redirect("/login/",locals()) #不符合条件转到login登录页面
urls.py
# coding=utf8from django.contrib import adminfrom django.urls import path,re_pathfrom APP import viewsurlpatterns = [ re_path('^$',views.index), #默认页 path('index/', views.index), #首页 path('login/', views.login), #登录页]
setting.py
INSTALLED_APPS
'APP', #新增应用名称
MIDDLEWARE
#'django.middleware.csrf.CsrfViewMiddleware', #测试cookie暂时关闭验证中间件
TEMPLATES
'DIRS': [os.path.join(BASE_DIR, 'APP/templates')],#静态页面储存位置
运行测试
生成session数据表
python manage.py makemigrations APPpython manage.py migrate
运行项目
python manage.py runserver 8000
页面访问
http://127.0.0.1:8000/
- 第一次访问会自动跳转到 login登录页面
- 在登录页面后提交登录,二次访问会记录已登录直接访问index页面
- cookie只适用于同一浏览器,跨浏览器访问失效