session的由来

cookie最大的问题就是键值对保存在客户端的浏览器上,我们看下session是如何保存的呢?

比如一个请求过来,数据是这样的{“username”:"zyb","password":"admin"},这个是时候在服务端这边,保存的格式是这样的

随机字符串1:{“username”:"zyb","password":"admin"}

而返回给客户端的数据是{“随机字符串2”:“随机字符串1”}

就比如下面的图,session就是k1或者k2对应的字典,也就是说,session是保存在服务端的,k1和k2就是为了保存不同用户的数据

上面的图有点简单,可以看下下面的图

流程就是这样的,客户端过来,带着一个随机字符串和k1的值,服务端根据k1的值去获取本地保存的字典,进行验证即可

session定义:session是保存在服务端的键值对,session必须依赖于cookie。

1、在服务端生成随机字符串

2、步骤一生成的随机字符串做为k,用户的数据做为v,将这个大字典保存在服务端

3、把步骤一生成的随机字符串当成cookie返回给客户端

4、浏览器下次来,带着随机字符串来就可以了

5、浏览器发起请求,服务端从cookie中找到随机字符串

6、然后根据随机字符串拿到从服务端获取具体的用户数据

设置session

        if username == "root" and userpwd == "root":

            rep = render(request,"session_2.html",locals())
request.session["username"] = username
request.session["userpwd"] = userpwd
# 将session保存在数据库中

  

取出session

def outer(func):
def inner(request):
# username = request.COOKIES.get("username")
# userpwd = request.COOKIES.get("userpwd")
username = request.session["username"]
username = request.session.get("username")
userpwd = request.session["userpwd"]
userpwd = request.session.get("userpwd")
# 1、获取cookie中的随机字符串
# 2、然后根据随机字符串去数据库中取拿到数据
# 3、然后根据拿到的数据,这个数据就是一个字典,然后通过拿字典的值,用get方法或者直接用k去获取即可 if username and userpwd:
rep = func(request)
return rep
else:
return redirect("/app1/session_one/")
return inner

  

清空session

def logout(request):
request.session.flush()
return redirect("/app1/session_one/")

  

上面我是通过chrom去访问的,下面我通过ie浏览器访问,最后可以看到数据库中会多了一条数据

执行注销操作,发现数据库中会少一条数据,flush操作会删除cookie和session,del方法只会删除session

def logout(request):
request.session.flush()
return redirect("/app1/session_one/")

  

session的其他操作

默认情况下session过期,数据库中的session不会被清除,需要执行命令去清理过期的session,request.session.clear_expired()命令

如何存储session,这些设置是在django的settings中设置的

其他session的公用的设置

我们一般会在settings中设置sessio_save_every_request = True

Django的session学习的更多相关文章

  1. Django 2.0 学习(21):Django Session

    Django Session Session 与Cookie 1.简介 1.Cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们又需要"保持状态",因 ...

  2. django form使用学习记录

    Django forms使用容易, 又方便扩展, 因此Django admin和CBVs基本都基于forms使用. 事实上, 由于django forms的强大验证功能, 大多数Django API ...

  3. Django之Session

    Django  -- Seeion介绍 问:       Django的session是什么? 答:       Django 完全支持匿名 Session的. Session 框架允许每一个用户保存 ...

  4. 浅析Django之session与cookie

    浅析Django之session与cookie 1 session与cookie概述 原理: 由于HTTP协议是无状态,无连接的,当用户发起网路请求时,需要服务端能标识用户ID,用以存储用户相关信息, ...

  5. django会话session

    因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的.通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于静 ...

  6. django中session的存储位置

    django-session 存放位置 设置session的保存位置,有三种方法: 保存在关系数据库(db) 保存在缓存数据库(cache) 或者 关系+缓存数据库(cache_db) 保存在文件系统 ...

  7. 在Django中Session的那点事!

    1.session是什么 首先引入度娘的解释:Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 We ...

  8. Django RF:学习笔记(8)——快速开始

    Django RF:学习笔记(8)——快速开始 安装配置 1.使用Pip安装Django REST Framework: pip install djangorestframework 2.在Sett ...

  9. Django 2.0 学习(17):Django 用户认证(auth模块)

    Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...

随机推荐

  1. python 阿狸的进阶之路(9)

    tcp传输: 传输需要ack回应,然后才清空缓存,服务端先起来. tcp流式协议,tcp的Nagle的优化算法,会将时间间隔短,数据量小的打包成一个,然后发送给对方,减少发送的次数. UDP协议: 不 ...

  2. redis如何清除所有的key

    redis比memcache好的地方之一,如果memcache,恐怕就得关掉重启了. 1 使用cli FLUSHDB 清除一个数据库,FLUSHALL清除整个redis数据. 2 使用shell re ...

  3. linux 不同服务器之间复制文件

    ----------------------拷贝文件夹---------------------------------------------- 把当前文件夹tempA拷贝到 目标服务器10.127 ...

  4. ReactiveX 学习笔记(13)基础类型

    Key Types and Life Management 本文主题是 Rx 中的基础类型 Subject 类及其生命周期的管理. 公共代码 RxNET private static void Wri ...

  5. 3.AOP入门1.md

    目录 1.定义 1.1基本概念 2. 1.定义 1.1基本概念 AOP:aspect object programing面向切面编程 aop编程的要点在于关注点和切入点 关注点:指的是代码中的重复部分 ...

  6. Hibernate 再接触 Hello world 模拟Hibernate

    没有Hibernate以前 Cilent 客户端 new出一个对象 然后执行JDBC 然后这样的访问数据库并不是面向对象语言 使用Hibernate以后 Cilent new 出一个对象后 访问配置文 ...

  7. Applese走迷宫-bfs

    链接:https://ac.nowcoder.com/acm/contest/330/C来源:牛客网 题目描述 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn ...

  8. com.google.gson.stream.MalformedJsonException

    今天下午项目更新后,调用接口时,提示“请求失败”,发现项目网络框架解析时,报错如下:com.google.gson.stream.MalformedJsonException: Unterminate ...

  9. Socket通讯-Netty框架实现Java通讯

    Netty简介 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...

  10. centos6安装nginx

    1.获取官方的仓库地址 我们需要先访问nginx的官方网站,获取官方的仓库地址https://nginx.org/en/linux_packages.html#stable 新建/etc/yum.re ...