目录
  1. 1. 1、Cookie
    1. 1.1. 介绍
    2. 1.2. cookie的作用
    3. 1.3. Django框架的下cookie
      1. 1.3.1. 1、 获取Cookie:
      2. 1.3.2. 2、设置Cookie:
      3. 1.3.3. 注意:
  2. 2. 2、Session
    1. 2.1. 1、介绍
      1. 2.1.1. Session与Cookie的区别:
    2. 2.2. 2、Django下的 Session 框架
Cookie和Session

1、Cookie

介绍

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

简单来说,Cookie 是保存在浏览器的一个键值对,每次的HTTP请求都会携带 Cookie 。

cookie的作用

  服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。

Django框架的下cookie

1、 获取Cookie:

获取已经设置好的cookies极其简单。 每一个HttpRequest 对象都有一个COOKIES 对象,该对象的行为类似一个字典,你可以使用它读取任何浏览器发送给视图(view)的cookies。

获取普通cookie
request.COOKIES['key']
request.COOKIES.get('key')

解密带签名的cookie
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
       参数:
           default: 默认值
               salt: 加密盐
            max_age: 后台控制过期时间

2、设置Cookie:

rep = HttpResponse(...) 或 rep = render(request, ...)
#设置cookie需要使用 HttpResponse对象的 set_cookie()方法

#设置普通cookie
rep.set_cookie(key,value,...)

#设置带签名的cookie
rep.set_signed_cookie(key,value,salt='加密盐',...)


   #参数:
        key,              键
        value='',         值
        max_age=None,     超时时间
        expires=None,     超时时间(IE requires expires, so set it if hasn't been already.)
        path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
        domain=None,      Cookie生效的域名
        secure=False,     https传输
        httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

<script src='/static/js/jquery.cookie.js'></script>
$.cookie("list_pager_num", 30,{ path: '/' });

注意:

  Cookie(特别是那些没通过HTTPS传输的)是非常不安全的。 因为HTTP数据是以明文发送的,所以 特别容易受到嗅探攻击。 也就是说,嗅探攻击者可以在网络中拦截并读取cookies,因此你要 绝对避免在cookies中存储敏感信息。 这就意味着您不应该使用cookie来在存储任何敏感信息。

因此不能在cookies中存储可能会被篡改的敏感数据。 在cookies中存储 IsLoggedIn=1 ,以标识用户已经登录。 犯这类错误的站点数量多的令人难以置信; 绕过这些网站的安全系统也是易如反掌。

2、Session

1、介绍

  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

Session与Cookie的区别:

  Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。

  Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

  Session 必须要依赖 Cookie ,因为 Cookie的值就等于 Session 的Key

###Session的工作原理:

  当用户第一次访问时,服务器会给其创建一个session,并且把session的Id(本质是随机字符串)以cookie的形式发送给客户端浏览器,下次再去访问服务器时,客户机浏览器会把存储到cookie中的session的Id一起传递到服务器端,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务

2、Django下的 Session 框架

  由于存在的限制与安全漏洞,cookies和持续性会话已经成为Web开发中令人头疼的典范。 好消息是,Django的目标正是高效的“头疼杀手”,它自带的session框架会帮你搞定这些问题。

  你可以用session 框架来存取每个访问者任意数据, 这些数据在服务器端存储,并对cookie的收发进行了抽象。 Cookies只存储数据的哈希会话ID,而不是数据本身,从而避免了大部分的常见cookie问题。

Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:

  • 数据库(默认)
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密cookie
文章作者: nocbtm
文章链接: https://nocbtm.github.io/2018/08/09/Cookie和Session/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 nocbtm's Blog
打赏
  • 微信
  • 支付宝