博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django基础-Cookie和session
阅读量:6101 次
发布时间:2019-06-20

本文共 3690 字,大约阅读时间需要 12 分钟。

hot3.png

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只适用于同一浏览器,跨浏览器访问失效

转载于:https://my.oschina.net/zhaojunhui/blog/2049781

你可能感兴趣的文章
Hardware Scaler for Performance and Efficiency
查看>>
LAMP环境搭建
查看>>
2012五大App趋势:软件开发不容小觑
查看>>
线上Nginx部署实战
查看>>
Java中需要编码的场景
查看>>
PHP生成word的三种方式
查看>>
设计模式(九)——桥接模式
查看>>
xen 创建本地存储
查看>>
TCP三次握手/四次挥手 | NAT介绍 |OSI与TCP/IP模型
查看>>
jQuery UI dialog 的使用
查看>>
程序员,其实你可以做的更好
查看>>
Hadoop Shuffle详解
查看>>
The Viewport and the Window
查看>>
自定义SpringMVC拦截器中HandlerMethod类型转换问题调研
查看>>
PostMessage And SendMessage
查看>>
Redis特性和应用场景
查看>>
SUSE 11 关闭防火墙
查看>>
spring security 3 动态获取权限
查看>>
路由器和交换机的区别
查看>>
我的友情链接
查看>>