day09 Django: 组件cookie session
 
一.cookie和session都是会话跟踪技术
    1.什么是会话        
    可以理解为客户端和服务端之间的一次会晤: 在一次会晤中可能包含多次请求和响应
    2.何时关闭会话
    浏览器关闭, 或服务端短连接断开
    3.什么是会话跟踪技术
    在一个会话中的多个请求共享数据, 这就是会话跟踪技术: 一般共享的数据是用户信息
    4.为什么要有cookie和session
    因为http协议是无状态协议: 也就是说每个请求都是独立的, 无法记录前一次的请求状态相关的任何信息, 为的是快, 所以不保存
        
二.Django组件: cookie
    1.cookie是什么? 
    针对每一个服务器, 存储在客户端浏览器上的key: value结构{ }
    浏览器: 对一个文件的维护, key: value格式保存  
    浏览器: 第一次请求: 带个空的cookie去访问服务器, 如果认证成功, 服务器会向cookie里写键值: set_cookie: key:value
    浏览器: 第二次请求: 带cookie去访问服务器,如果有服务器认可的键值: key:value, 服务器做相应的响应
    2.cookie的设置和获取
    1.服务器设置cookie: 给浏览器的cookie设置键值对 key: value, 过期时间默认是2周
        obj = HttpResponse('ok')
        obj.set_cookie("username", user)
    2.服务器获取cookie: {}
        request.COOKIES                             
        is_login = request.COOKIES.get('is_login')
      views.py
from django.shortcuts import render, redirect, HttpResponse
def login(request):
    if request.method == "GET":
        return render(request, 'login.html', locals())
    else:
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        print(user, pwd)
        if user == 'bajie' and pwd == '123':
            obj = HttpResponse('ok')
            obj.set_cookie("username", user)
            obj.set_cookie("is_login", True)
            return obj
        else:
            return HttpResponse('fail')
def index(request):
    print(request.COOKIES)                            
    is_login = request.COOKIES.get('is_login')
    user = request.COOKIES.get('username')
    if is_login:
        return render(request, 'index.html', locals())
    else:
        return redirect('/login/')
    3.cookie规范(http)
    cookie大小上限为4kb
    一个服务器最多在浏览器上保存20个cookie键值对
    一个浏览器最多保存300个cookie
    浏览器自己的cookie,为了竞争,在http规范的基础上有所'扩展'
    不同浏览器之间cookie是不共享的
    4.cookie的过期时间设置:
    obj = redirect('/index/')
    obj.set_cookie("username", user, max_age=180)        #过期时间: 单位秒
    5.cookie的删除
    obj = redirect('/index/')
    obj.delete_cookie("username")
    views.py: 比上面的例子多个数据库验证
from django.shortcuts import render, redirect, HttpResponse
from app01.models import UserInfo
def login(request):
    if request.method == "GET":
        return render(request, 'login.html', locals())
    else:
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        print(user, pwd)
        user_obj = UserInfo.objects.filter(user=user, pwd=pwd).first()
        if user_obj:
            obj = redirect('/index/')
            obj.set_cookie("username", user, max_age=180)
            obj.set_cookie("is_login", True)
            return obj
        else:
            return HttpResponse('fail')
def index(request):
    print(request.COOKIES)
    is_login = request.COOKIES.get('is_login')
    user = request.COOKIES.get('username')
    if is_login:
        return render(request, 'index.html', locals())
    else:
        return redirect('/login/')
 
三.Django组件: session
    1.cookie的问题
    所有的信息保存在客户端, 不安全
    每次请求都会带cookie过去, 浪费资源
    2.session是什么?
    session是服务端的技术: 服务器在运行时可以为每一个用户创建一个独享的session对象
    服务器: 对一个文件的维护, key: value格式保存  
    浏览器: 第一次请求: 带个空的cookie去访问服务器,(因为session是基于cookie实现的) 如果认证成功, request.session['is_login'] = True 服务器会做两件事:
        第一件事: 写session:
            比如django是写到django-session表里: 把生成随机字符串作为key
            把我们设置的键值对作为value,做完摘要插入表中
        第二件事: 写cookie: 把"sessionid"作为key, 把session的"key"作为value
    浏览器: 第二次请求: 带cookie去访问服务器,只有一个键值对 cookie:{"sessionid": "随机字段"}
    3.session的设置与获取
    1.服务器设置session
        request.session['is_login'] = True        
    2.服务器获取session
        request.session.get('username')           #1.取sessionid   #2.去django_session表中过滤sessionid的记录   #3.把session_data拿出来,反序列化
     views.py
from django.shortcuts import render, redirect, HttpResponse
from app01.models import UserInfo
def index(request):
    user = request.session.get('user')
    is_login = request.session.get('is_login')
    if not is_login:
        return redirect('/login/')
    else:
        return render(request, 'index.html', locals())
def login(request):
    if request.method == "GET":
        return render(request, 'login.html', locals())
    else:
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        print(user, pwd)
        user_obj = UserInfo.objects.filter(user=user, pwd=pwd).first()
        if user_obj:
            request.session["user"] = user
            request.session['is_login'] = True
            return redirect('/index/')
        else:
            return HttpResponse('fail')     
def logout(request):
    request.session.flush()
    return redirect('/login/') 
    4.session的删除
        request.session.flush()     #1.取sessionid   #2.过滤出sessionid对应的表记录,删掉 #3.删掉cookie
    5.同一个浏览器访问同一个服务器, 多个账号登录时出现的问题:
    1.第一个用户登录,带空cookie过去: 服务器写session, 写cookie, 没有问题
    2.但是第二个用户登录, 或者同一个用户重复登录: 那么写的session很快会写爆,所以django给我们做了这么一件事,
        当第一次登录时,正常写session,正常写cookie
        当第二次登录时,cookie不变: {"sessionid":"随机字符串"}, session的表django_session里面的key不变,只update对应的values
        session的一条记录只对应一个浏览器
            
 
 
 
 
 
 
 
 
 
 

day09 Django: 组件cookie session的更多相关文章

  1. python 全栈开发,Day76(Django组件-cookie,session)

    昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...

  2. Django组件-cookie,session

    昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反 ...

  3. Django组件 - cookie、session、用户认证组件

    一.cookie 1.会话跟踪技术 1)什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话 ...

  4. Django组件-cookie与session

    一.会话跟踪技术 1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...

  5. web框架开发-Django组件cookie与session

    http协议的每一次都是无保存状态的请求,这会带来很多的不方便,比如,一刷新网页,或者进入该网页的其他页面,无法保存之前的登录状态.为了解决类似这样的问题,引入了会话跟踪 会话跟踪技术 1 什么是会话 ...

  6. Django 组件-cookie与session

    Cookie概述 什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中 ...

  7. Django 组件-cookie 与 session

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

  8. Django组件——cookie与session

    一.会话跟踪技术 1.什么是会话跟踪技术 可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应. 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直 ...

  9. 13 Django组件-cookie与session

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

随机推荐

  1. How to backup on MSSQL by table level ?

    MSSQL is good database.   Unlike as Oracle,  it seems that can not backup sqlserver databasee tables ...

  2. prototype入门----自定义创建元素

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Java知识总结:Java反射机制(用实例理解)

    概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能 ...

  4. 二 sql语句,常用字段数据类型

    MySQL中常用DDL命令   database definition language  与 DML命令 :  database definition language 操作数据库: 创建数据库 : ...

  5. Dockfile的详解

    Dockerfile是构建镜像的指令文件,按照dockerfile的规范分为如下几部分: FROM 基础镜像,FROM alpine:3.8(任何的一个镜像都可以作为基础镜像,主要看我们做的镜像是干嘛 ...

  6. Mac OS 下升级gcc遇到的坑

    为了升级gcc,原来版本是4.8,想升级到4.9,因为在Mac上安装cocoNLP一直出错,想试试看是不是gcc版本太低的原因,因此在此想要升级到4.9 经历了三个问题: - brew update太 ...

  7. 072、Java面向对象之定义构造方法

    01.代码如下: package TIANPAN; class Book { // 定义一个新的类 public Book() { // 构造方法 System.out.println("* ...

  8. Docker 镜像文件的导入和导出

    使用save命令 保存镜像 docker save -o name_by_you.tar exist_images 将文件copy到另一台机器 使用load命令将镜像文件保存到本地仓库 docker ...

  9. SSH框架系列:Spring AOP应用记录日志Demo

    分类: [java]2013-12-10 18:53 724人阅读 评论(0) 收藏 举报 1.简介 Spring 中的AOP为Aspect Oriented Programming的缩写,面向切面编 ...

  10. Django 利用第三方平台实现用户注册02

    前言: 上篇博客我们已经对设置了图形验证码,短信验证码对用户信息进行了一些简单的验证,本篇博客我们会将上篇的一些验证方法进行结合,来进一步完成我们的注册工作 1. 创建视图类 在user中的view创 ...