Django中Cookie和session应用

  1. 什么是cookie?

    cookie是客户端浏览器上的一个文件,以键值对进行保存,类似于字典的 {'key' : 'value'} ,与服务器端没有关系,当浏览器访问服务器时候,服务器会生成一个随机字符串保存在cookie中返回给客户端,这样当客户端浏览器下次访问服务器端的时候,就会带着这个保存了服务器端的随机字符串的cookie访问服务器,服务器收到请求后,经过检查此cookie,标识此客户端为已通过认证的状态,可以直接登录。

  2. cookie的作用?

    因为web端是通过HTTP协议进行连接,由于HTTP协议的无状态,无连接性质,所以在同一客户端先后两次请求就会产生无逻辑可循的问题,cookie可以解决无状态无连接导致的问题。

  3. cookie常用参数

    key: 键

    value: 值

    max_age: cookie 的过期时间,多久后过期,时间为秒

    expires: 过期时间,为具体的时间 格式化的时间

    path: 生效的路径,该路径下的子路径也生效

    domain: 生效的域名

    secure: 可设置布尔值, 当设置为False时只能用HTTP协议传输,HTTPs用True

    httponly: 可设置布尔值,False表示JavaScript不能访问该cookie

  4. Django  中  Cookie  的具体应用

    # Djano中设置cookie
    from djano.shortcuts import render, redirect, HttpResponse
    # 设置 cookie 需要用 HttpResponse 对象
    response = HttpResponse('ok')
    response.set_cookie('user', 'ming') # 设置cookie
    response.set_cookie('is_login', True)
    ​
    # 获取cookie通过request对象
    user = request.COOKIE.get('user', None)
    is_login = request.COOKIE.get('is_login', None)
    ​
    # 删除cookie使用 httpResponse对象
    response.delete_cookie('is_login')
    ​
    ​
    ​
    # session应用
    # 在视图函数中通过request对象操作session
    # 1. 设置session
    request.session['key1'] = 'value1'
    request.session['key2'] = 'value2'
    # 过程:
    # i) 生成一个随机字符串,作为主键
    # ii) 在django_session表中插入有三个字段的一条数据(一条数据对应一个浏览器会话)
    -- session_key:主键-随机字符串
    -- session_data:该会话拥有的所有key-value形成的大字典的加密字符串
    -- expire_date:过去时间,默认14天
    # iii) 往浏览器中写入一条cookie,sessionid=主键的随机字符串
    ​
    # 2. 获取session
    request.session.get('key', None)
    ​
    # 3. 删除session
    request.session.delete() # 只删除当前会话对应的一条记录
    request.session.flush() # 除了删除当前会话对应的一条记录外,还删除对应浏览器中的cookie,建议使用
    ​
    # 4. 清除django-session表中所有过期的session字段
    request.session.clear_expired() # 情况所有过去的Session
    ​
    # 5. 了解
    request.session.session_key # 获取当前会话对应的session_key
    request.session.exists('session_key') # 判断某session_key是否存在
    ​
    ​
    ​
    # session的配置
    # 1. 数据库存储
    # SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
    #
    # 2. 缓存存储
    # SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
    # SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    #
    # 3. 文件存储
    # SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
    # SESSION_FILE_PATH = '/' # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
    #
    # 4. 缓存 + 数据库存储
    # SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
    #
    # 5. 加密Cookie
    # SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
    #
    # SESSION_COOKIE_NAME = "sessionid" # cookie的key名,值为随机字符串
    # SESSION_COOKIE_PATH = "/" # 作用路径,/代表所有路径下均起作用)
    # SESSION_COOKIE_DOMAIN = None # 作用域名
    # SESSION_COOKIE_SECURE = False # 布尔类型,浏览器是否通过HTTPS方式回传cookie
    # SESSION_COOKIE_HTTPONLY = True # 布尔类型,JS能否直接访问该条cookie
    # SESSION_COOKIE_AGE = 1209600 # 数据库session字段的过期时间
    # SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 浏览器关闭后cookie是否过期,默认False不过期,建议True
    # SESSION_SAVE_EVERY_REQUEST = False # 每一次请求,是否更新session字段的过期时间,默认False不更新,建议True
  5. session和cookie的异同点

    1、 cookie采用的是在客户端保持状态的方案,session采用的是在服务器端保持状态的方案。
    2、正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示,浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本也可以生成cookie。
    3、cookie的生命期为浏览器会话期间,即关闭浏览器窗口,cookie就消失。
    ​
    4、当程序需要为某个客户端请求创建一个session时,服务器首先检查这个客户端的请求里是否包含一个session标识(session id),如果包含则说明以前已经为该客户端创建过session,服务器就按照session id 将这个session检索出来使用,检索不到就会新建一个。
    ​
    5、经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器
    会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:
    <form name="testform" action="/xxx">
    <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
    <input type="text">
    </form>
    实际上这种技术可以简单的用对action应用URL重写来代替。
    ​
    cookie 和session 的区别:
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
      考虑到安全应当使用session。
    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
      考虑到减轻服务器性能方面,应当使用COOKIE。
    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
    5、所以个人建议:
      将登陆信息等重要信息存放为SESSION
      其他信息如果需要保留,可以放在COOKIE中
  6. 总而言之,cookie/session的出现就是为了解决http协议无状态的弊端,为了让客户端和服务端建立长久联系而出现的。

cookie和session的区别及在Django中应用的更多相关文章

  1. django上课笔记4-复习数据库操作-复习模板-Seccion-详细cookie和session的区别

    一.复习数据库操作 字段类型 字符串 EmailField(CharField): IPAddressField(Field) URLField(CharField) SlugField(CharFi ...

  2. Cookie和Session的区别

    前言 HTTP是一种无状态的协议,为了分辨链接是谁发起的,就需要我们自己去解决这个问题.不然有些情况下即使是同一个网站我们每打开一个页面也都要登录一下.而Session和Cookie就是为解决这个问题 ...

  3. cookie 和session 的区别详解

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  4. Cookie和Session的区别详解

    本文引用自:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一 ...

  5. cookie 和session 的区别

    假如我填好了淘宝的用户名密码,点击登录,浏览器客户端像服务器端发送请求,这时服务器端看这个用户是第一次登陆,session会让客户端这个浏览器生成个cookie,并给cookie一个session i ...

  6. Cookie与Session的区别-总结很好的文章

    Cookie与Session的区别-总结很好的文章 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对 ...

  7. 【转】cookie和session的区别

    原作者:施杨(施杨's Think out)出处:http://shiyangxt.cnblogs.com ************** 本文版权归原作者和博客园共有,欢迎转载,转载请保留该申明 ** ...

  8. 认识cookie与session的区别与应用

    通常我们所说的浏览器自动保存密码,下次不用登陆,网页换皮肤,用户引导,提示一次就不再出现的内容,大部分通过cookie或者session来实现的,在这次制作用户引导中,本人就用到了cookie的内容, ...

  9. JavaWeb之Cookie和Session的区别

    Cookie和Session的区别 一.cookie机制和session机制的区别 ********************************************************** ...

随机推荐

  1. 使用sphinx快速为你python注释生成API文档

    sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...

  2. day-11函数的形参与实参

    形参与实参 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 怎么使用函数的参数:在函数体中用定义的参数名直接使用 ...

  3. direnv 一个强大的环境变量管理工具

      direnv 是一个基于golang 编写的强大的环境变量管理工具,可以帮助我们简化环境变量管理,而且 支持的平台比较多. 基本使用 下载二进制软件包 https://github.com/dir ...

  4. HBASE 基础命令总结

    HBASE基础命令总结 一,概述 本文中介绍了hbase的基础命令,作者既有记录总结hbase基础命令的目的还有本着分享的精神,和广大读者一起进步.本文的hbase版本是:HBase 1.2.0-cd ...

  5. LOJ 2550 「JSOI2018」机器人——找规律+DP

    题目:https://loj.ac/problem/2550 只会写20分的搜索…… #include<cstdio> #include<cstring> #include&l ...

  6. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  7. 【凡尘】---react-redux---【react】

    一.Redux与组件 react-redux是一个第三方插件使我们在react上更方便的来使用redux这个数据架构 React-Redux提供connect方法,用于从UI组件生成容器组件,conn ...

  8. python3-基础7

    协程函数 面向过程编程 递归与二分法 内置函数   lambda 模块与包的使用 import from ... import ... 常用模块 ########################### ...

  9. Spring的IOC原理

    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机 ...

  10. 屏蔽F12审查元素,禁止使用右键菜单

    一.屏蔽F12审查元素 <script type="text/javascript"> document.onkeydown = function() { ) { al ...