Django组件cookie与session的具体使用


Posted in Python onJune 05, 2019

一、会话跟踪技术

1、什么是会话跟踪技术

我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束。在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中。

在Web中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束。

在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下: 请求银行主页;

  • 请求登录(请求参数是用户名和密码);
  • 请求转账(请求参数与转账相关的数据);
  • 请求信誉卡还款(请求参数与还款相关的数据)。

在这上会话中当前用户信息必须在这个会话中共享的,因为登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。

2、会话路径技术使用Cookie或session完成

我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术。

二、Cookie概述  

1、什么叫Cookie

Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie是key-value结构,类似于一个python中的字典。随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!

Django组件cookie与session的具体使用

2、Cookie规范

  • Cookie大小上限为4KB;
  • 一个服务器最多在客户端浏览器上保存20个Cookie;
  • 一个浏览器最多保存300个Cookie;

上面的数据只是HTTP的Cookie规范,但在浏览器大战的今天,一些浏览器为了打败对手,为了展现自己的能力起见,可能对Cookie规范“扩展”了一些,例如每个Cookie的大小为8KB,最多可保存500个Cookie等!但也不会出现把你硬盘占满的可能!

注意,不同浏览器之间是不共享Cookie的。也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,然后由IE保存起来,当你在使用FireFox访问服务器时,不可能把IE保存的Cookie发送给服务器。

3、Cookie与HTTP头

Cookie是通过HTTP请求和响应头在客户端和服务器端传递的:

  • Cookie:请求头,客户端发送给服务器端;
  • 格式:Cookie:a=A;b=B;c=C。即多个Cookie用分号离开;lSet-Cookie:响应头,服务器端发送给客户端;
  • 一个Cookie对象一个Set-Cookie:Set-Cookie:a=ASet-Cookie:b=BSet-Cookie:c=C

4、Cookie的覆盖

如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,例如客户端的第一个请求服务器端发送的Cookie是:Set-Cookie:a=A;第二请求服务器端发送的是:Set-Cookie:a=AA,那么客户端只留下一个Cookie,即:a=AA。

5、django中的cookie语法

设置cookie:

rep = HttpResponse(...) 或 rep = render(request, ...) 或 rep = redirect()

 

rep.set_cookie(key,value,...)

rep.set_signed_cookie(key,value,salt='加密盐',...) 

源码:

'''
class HttpResponseBase:

  def set_cookie(self, key,     键
  




 value='',   值
  





 max_age=None,  超长时间 















cookie需要延续的时间(以秒为单位)















如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止。

  





 expires=None,  超长时间
  












expires默认None ,cookie失效的实际日期/时间。 
 















  





 path='/',   Cookie生效的路径,
             浏览器只会把cookie回传给带有该路径的页面,这样可以避免将
             cookie传给站点中的其他的应用。
             / 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
  





 
        domain=None,   Cookie生效的域名
            
             你可用这个参数来构造一个跨站cookie。
             如, domain=".example.com"
             所构造的cookie对下面这些站点都是可读的:
             www.example.com 、 www2.example.com 
  











 和an.other.sub.domain.example.com 。
             如果该参数设置为 None ,cookie只能由设置它的站点读取。

  





 secure=False,  如果设置为 True ,浏览器将通过HTTPS来回传cookie。
  





 httponly=False  只能http协议传输,无法被JavaScript获取
             (不是绝对,底层抓包可以获取到也可以被覆盖)
  




): pass

'''

获取cookie:

request.COOKIES

删除cookie:

response.delete_cookie("cookie_key",path="/",domain=name)

三、session

1、session简介

Session是服务器端技术,利用这个技术,服务器在运行时可以 为每一个用户的浏览器创建一个其独享的session对象,由于 session为用户浏览器独享,所以用户在访问服务器的web资源时 ,可以把各自的数据放在各自的session中,当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中 取出数据为用户服务。

Django组件cookie与session的具体使用

2、django中session语法

1、设置Sessions值

request.session['session_name'] ="admin"

2、获取Sessions值

session_name = request.session["session_name"]

3、删除Sessions值

del request.session["session_name"]

4、flush()

删除当前的会话数据并删除会话的Cookie。

这用于确保前面的会话数据不可以再次被用户的浏览器访问

5、get(key, default=None)

fav_color = request.session.get('fav_color', 'red')

6、pop(key)

fav_color = request.session.pop('fav_color')

7、keys()

8、items()

9、setdefault()

用户session的随机字符串
request.session.session_key

# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()

# 检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")

# 删除当前用户的所有Session数据
request.session.delete("session_key")

request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。

3、session配置

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。

 

a. 配置 settings.py

 

 SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)

  

 SESSION_COOKIE_NAME = "sessionid"      # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)

 SESSION_COOKIE_PATH = "/"        # Session的cookie保存的路径(默认)

 SESSION_COOKIE_DOMAIN = None        # Session的cookie保存的域名(默认)

 SESSION_COOKIE_SECURE = False       # 是否Https传输cookie(默认)

 SESSION_COOKIE_HTTPONLY = True       # 是否Session的cookie只支持http传输(默认)

 SESSION_COOKIE_AGE = 1209600        # Session的cookie失效日期(2周)(默认)

 SESSION_EXPIRE_AT_BROWSER_CLOSE = False     # 是否关闭浏览器使得Session过期(默认)

 SESSION_SAVE_EVERY_REQUEST = False      # 是否每次请求都保存Session,默认修改之后才保存(默认)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现生成随机日期字符串的方法示例
Dec 25 Python
python3中的md5加密实例
May 29 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
Python模拟简单电梯调度算法示例
Aug 20 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
Python列表的切片实例讲解
Aug 20 Python
Python class的继承方法代码实例
Feb 14 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
Python数据可视化实现漏斗图过程图解
Jul 20 Python
python re.match()用法相关示例
Jan 27 Python
Python快速优雅的批量修改Word文档样式
May 20 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 #Python
python3下载抖音视频的完整代码
Jun 05 #Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 #Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 #Python
python添加菜单图文讲解
Jun 04 #Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 #Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 #Python
You might like
php 静态化实现代码
2009/03/20 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
自动最大化窗口的Javascript代码
2013/05/22 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
解读Django框架中的低层次缓存API
2015/07/24 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
自我评价怎么写正确呢?
2013/12/02 职场文书
校本教研工作制度
2014/01/22 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
超市创业计划书
2014/09/15 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
关于的python五子棋的算法
2022/05/02 Python