http://www.cnblogs.com/liwenzhou/p/8343243.html

一、Cookie

Cookie是什么?

  就是保存在客户端浏览器上的键值对。

Cookie为什么存在?

  因为HTTP请求是没有状态的,每一次请求都是独立的。

服务端控制着响应,在响应里可以让浏览器在本地保存键值对,下一次登录时可以自动携带这个值。

Cookie的应用:

  1、登陆、七天免登陆。

  2、记录用户的浏览习惯。

  3、简单的投票限制。

Cookie是服务端设置的,浏览器可以不让服务端设置Cookie(禁用),但是就无法登陆。

Cookie默认在浏览器关闭时清楚。

(1)Cookie设置流程(以登陆为例):

  1、在登陆数据提交时red = redrict(...)     red.set_cookie("key","value")

  2、在主页验证是否有cookie: request.COOKIES.get("...")

(2)装饰器

由于在每个页面都会用到Cookie,所以可以把验证Cookie的语句封装成装饰器来使用:

(3)验证cookie后返回之前的页面  path_info

(4)cookie的保存时间max_age

(5)删除cookie

 def cookie_decoration(func):
     def inner(request):
         ":
             return func(request)
         else:
             present_url = request.path_info    #获取当前url地址
             return redirect("/login"+"/?pre="+present_url)
     return inner

 def login(request):
     if request.method == "POST":
         ":
             if request.GET.get("pre"):  #获取上一页url地址
                 red = redirect(request.GET.get("pre"))
             else:
                 red = redirect("/home")
             red.set_cookie(",max_age=30)  #max_age是cookie值保存的时间,以秒为单位
             return red
         else:
             return HttpResponse("error")
     return render(request,"login.html",locals())

 @cookie_decoration
 def home(request):
     return render(request,"home.html",locals())

 def logout(request):
     red = redirect("/login")
     red.delete_cookie("is_login")
     return red

二、session

为什么有session?

  cookie有一些弊端,其存储的数据是有限制的,而且数据存储在客户端,容易被窃取,所以出现session,session没有数据大小限制,且数据存储在服务端,安全性强。

  session依赖于cookie,他把随机字符串作为一个大字典的键,把数据都存储在这个大字典中,字典存储在服务端,而把这个随机字符串作为cookie的值传给客户端,所以客户端只拿到这个随机值,通过这个值去服务端取数据。

注意:session需要创建数据库信息,才能把键值对存储在数据库中,不然无法使用,记得makemigrations

 def cookie_decoration(func):
     def inner(request):
         if request.session.get("is_login") == "true":
             return func(request)
         else:
             present_url = request.path_info    #获取当前url地址
             return redirect("/app02/login"+"/?pre="+present_url)
     return inner

 def login(request):
     if request.method == "POST":
         ":
             request.session['is_login'] = "true"
             if request.GET.get("pre"):  #获取上一页url地址
                 return redirect(request.GET.get("pre"))
             else:
                 return redirect("/app02/home")

         else:
             return HttpResponse("error")
     return render(request,"login.html",locals())

 @cookie_decoration
 def home(request):
     return render(request,"home.html",locals())

 def logout(request):
     request.session.flush()
     return redirect("/app02/login")

Django之Cookie和Session的更多相关文章

  1. Django之Cookie、Session、CSRF、Admin

    Django之Cookie.Session.CSRF.Admin   Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...

  2. [py][mx]django的cookie和session操作-7天免登录

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  3. Django基础cookie和session

    Django基础cookie和session 1.会话跟踪 ​ 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如给10086打个电话,你就是客户端, ...

  4. django的cookie和session以及内置信号、缓存

    cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...

  5. django的cookie 和session

    Cookie 1.获取cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt=' ...

  6. Django组件-cookie与session

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

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

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

  8. Django 之 cookie和session

    一. Cookie 1.Cookie的由来 因为HTTP协议是无状态的,无状态的意思就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,也不会受前后请求响应情况直接影响.简 ...

  9. django之COOKIE 与 SESSION

    COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  10. 9.Django组件-cookie和session

    HTTP协议的无保存状态,对两次请求没有任何关联.每次请求都是相互独立的. 1.cookie简介 什么是会话跟踪技术我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会 ...

随机推荐

  1. Linux内核入门到放弃-虚拟文件系统-《深入Linux内核架构》笔记

    VFS的任务并不简单.一方面,它用来提供了一种操作文件.目录及其他对象的统一方法.另一方面,它必须能够与各种方法给出的具体文件系统的实现达成妥协,这些实现在具体细节.总体设计方面都有一些不同之处. 文 ...

  2. C++ shared_ptr、unique_ptr、weak_ptr

    shared_ptr unique_ptr weak_ptr 内存泄漏 智能指针 引用计数 循环引用 reset

  3. 程序员修神之路--🤠分布式高并发下Actor模型如此优秀🤠

    写在开始 一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递.使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争.处理各种锁的问题是让人十分头痛的一件事. 传统多数流行的语言并 ...

  4. 追逐心目中的那个Ta

    申明:全篇皆为作者臆想,浪漫主义代表派作品,若有雷同,纯属巧合 人生最难过的不就是在一无所有的年纪里遇到了最想呵护一生的人,而在拥有一切的时候却失去了不顾一切的心. 长夜漫漫,本是相思人,偏听多情曲, ...

  5. Codeforces Round #498 (Div. 3)--E. Military Problem

    题意问,这个点的然后求子树的第i个节点. 这道题是个非常明显的DFS序: 我们只需要记录DFS的入DFS的时间,以及出DFS的时间,也就是DFS序, 然后判断第i个子树是否在这个节点的时间段之间. 最 ...

  6. JS 设计模式三 -- 策略模式

    策略模式 概念 定义一系列算法,把它们一个个封装起来. 将算法的使用与算法的实现分离开来 实现 // 加权映射关系 var levelMap = { S: 10, A: 8, B: 6, C: 4 } ...

  7. BugPhobia开发篇章:Beta阶段第VII次Scrum Meeting

    0x01 :Scrum Meeting基本摘要 Beta阶段第七次Scrum Meeting 敏捷开发起始时间 2015/12/19 00:00 A.M. 敏捷开发终止时间 2015/12/21 23 ...

  8. 小小知识点(四)——MATLAB如何画等高线图和线性规划约束方程

    MATLAB程序: figure contourf(x,y,data) % 画等高线 hold on plot(x,y(x)) %画线性规划约束方程1 hold on plot(y,x(y)) %画线 ...

  9. svnsync同步svn

    使用svnsync实现已有版本库的镜像svn不支持分布式开发,所以把svn版本库保存在一台服务器上是不安全的.制作一个镜像svn版本库有多种方式,我采用subversion自带的svnsync程序. ...

  10. Ubuntu shutdown

    gsettings set com.canonical.indicator.session suppress-logout-restart-shutdown true