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. URL分发(URLConf)

    如果项目中应用太多,都写到顶层的urls.py中,如果个别应用url出问题的话,其他的应用也会受影响,所以我们需要对每个应用下面都写一个urls.py,实现分发 顶层urls.py中写:(属于blog ...

  2. mysql字符串处理

    MySQL字符串操作: substring(column_name, "start_position"); # 从指定的位置(第二个参数, start_position)开始,取到 ...

  3. open read split

    open  来打开文件, 其具体表现为 open('文件名或路径', 'r or w or other', 位置?) 其生成一个文件类型的对象 file object. 可写做 FILENAME = ...

  4. LeetCode OJ 2. Add Two Numbers

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

  5. 高效Java敏感词、关键词过滤工具包_过滤非法词句

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...

  6. 吴裕雄 python深度学习与实践(2)

    #coding = utf8 import threading,time,random count = 0 class MyThread (threading.Thread): def __init_ ...

  7. pycharm 的包路径设置export PYTHONPATH=$PYTHONPATH

    我们使用pycharm的时候,经常会因为要链接(import)其他自己写的包,因此在pycharm的时候经常会 报错,就是找不到自己的包,在命令行下常用,export PYTHONPATH=$PYTH ...

  8. /src/log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn ...

  9. JAVA语言 第六周

    时间太快了,过几天就要去学校了.在家里学习不下去,一点不心静.学习也不如刚放假的时候了. 活在被开学支配的恐惧下,每天看一会儿视频(书是真的难看下去). 效果不明显,这个暑假已经被拉开差距 了.提前几 ...

  10. scrapy爬虫的编写步骤

    scrapy的步骤: a.编写item,爬取的各个属性 b.编写spider,name 要和 scrapy crawl xxspider一致,里面编写parse的信息,就是xpath获取item的各个 ...