Cookie与session

一、Cookie介绍

  • Cookie是什么?

    • Cookie是由服务器生成的,存储在浏览器端的少量数据(键值对)
    • 服务器生成Cookie后,会在响应请求时发送Cookie数据给浏览器,浏览器接收到后会自动保存
    • 浏览器再次请求服务器时,会自动上传该服务器生成的所有的Cookie
    • Cookie是有过期时间的,默认关闭浏览器之后Cookie就会过期
    • 每个域名下保存的Cookie的个数是有限制的,不同浏览器保存的个数不一样;
    • 每个Cookie保存的数据大小是有限制的,不同的浏览器保存的数据大小不一样;

    • Cookie是基于域名安全的:

      • Cookie的存储是以域名的方式进行区分的;
      • 每个网站只能读取自己生成的Cookie,而无法读取其它网站生成的Cookie;
      • 浏览器请求某个网站时,会自动携带该网站所有的Cookie数据给服务器,但不会携带其它网站生成的Cookie数据。

  • Cookie的应用:

    • 记录用户的登录状态
    • 浏览过哪些商品

二、Cookie操作:

  • 读取数据

    request.COOKIE['count']
    
  • 保存数据

    response.set_cookie('count', countmax_age, expires)
    
    • max_age是一个整数,表示在指定秒数后过期
    • expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期
    • max_age与expires二选一
    • 如果不指定过期时间,在关闭浏览器时cookie会过期

三、案例--通过cookie保存自增状态

  • 需求:

    • 当请求url地址http://127.0.0.1:8000/cookie/时,显示如下图界面


    • 点击按钮时,数值实现自增: 客户端通过get请求服务器,服务器从cookie中读取'count'的值,自增后,返回给客户端进行显示

    • 当关闭浏览器再打开时,能够接着上一次的值实现自增(状态保存)
    • 通过cookie方式实现
  • 实现步骤:

    1. 配置请求的url地址
    2. 创建视图函数
    3. 创建html界面
    4. 服务器自增提供服务:定义 自增请求的url 和 自增视图函数
    5. 实现自增效果:在html界面中,点击自增按钮时,使用ajax请求/do_increment_cookie/地址,服务器返回自增后的值,界面再显示出来
    6. 显示上一次的值: 进入html界面时,服务器要读取cookie中‘count’的值,并在html界面显示出来
  • 实现参考

Session

一、Session介绍

  • 一些重要敏感的数据(银行卡账户,密码,验证码),应该存储在服务器端,而不是存储在浏览器,这种在服务器端进行状态数据保存的方案就是Session

  • Session的使用依赖于Cookie,如果浏览器不能保存Cookie,那么Session则失效了

  • django项目有session模块,默认开启session功能,会自动存储session数据到数据库表中

  • Session也是有过期时间的,如果不指定,默认两周就会过期

  • Session数据(键值对)存储原理:


二、Session的使用

  1. 开启session功能

    在django项目中,session功能默认是开启的;要禁用session功能,则可禁用下图中的session中间件:


  2. session对象操作(request.session字典)

    • 保存session数据(键值对)

      request.session['键']=值
      
    • 读取session数据

      request.session.get('键',默认值)
      
    • 清除session数据(清空值)

      request.session.clear()
      
    • 删除会话中的指定键及值,在存储中只删除某个键及对应的值。

      del request.session['键']
      
    • 设置会话的超时时间,如果没有指定过期时间则两个星期后过期。

      • 如果value是一个整数,会话将在value秒没有活动后过期。
      • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
      • 如果value为None,那么会话永不过期。

        request.session.set_expiry(value)
        
  3. 案例--通过session保存自增状态

    • 需求:

      • 当请求url地址http://127.0.0.1:8000/session/时,显示如下图界面


      • 点击按钮时,数值实现自增: 客户端通过get请求服务器,服务器从session中读取'count'的值,自增后,返回给客户端进行显示

      • 当关闭浏览器再打开时,能够接着上一次的值实现自增(状态保存)
      • 通过session方式实现
    • 实现步骤:

      1. 配置请求的url地址
      2. 创建视图函数
      3. 创建html界面(复制前面自增例子的html稍作修改)
      4. 服务器自增提供服务:定义 自增请求的url 和 自增视图函数
      5. 实现自增效果:在html界面中,点击自增按钮时,使用ajax请求/do_increment_session/地址,服务器返回自增后的值给界面再显示出来
      6. 显示上一次的值: 进入html界面时,服务器要读取session中‘count’的值,并在html界面显示出来
    • 实现参考

三、session存储方式

Session数据可以存储在数据库、内存、Redis等,可以通过在项目的setting.py中设置SESSION_ENGINE项,指定Session数据存储的方式。

  • 存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式。

    SESSION_ENGINE='django.contrib.sessions.backends.db'
    
  • 存储在内存中:存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快

    SESSION_ENGINE='django.contrib.sessions.backends.cache'
    
  • 混合存储:优先从本机内存中存取,如果没有则从数据库中存取。

    SESSION_ENGINE='django.contrib.sessions.backends.cached_db' 
    
  • 通过Redis存储session

阅读更多
文章标签: cookie session
上一篇Python 线程池原理及实现
下一篇Linux系统下使用wgrib2解析气象有关grb2文件
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭