热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django组件之ookie和session

-----------------------------------------------------------------------------------------相

-----------------------------------------------------------------------------------------相信自己,水滴石穿,不要放弃!


 

会话跟踪技术  

1 什么是会话跟踪技术 

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

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

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

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

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

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

COOKIE概述  

什么叫COOKIE 

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

COOKIE规范 

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

上面的数据只是HTTP的COOKIE规范,但在浏览器大战的今天,一些浏览器为了打败对手,为了展现自己的能力起见,可能对COOKIE规范“扩展”了一些,例如每个COOKIE的大小为8KB,最多可保存500个COOKIE等!但也不会出现把你硬盘占满的可能! 
注意,不同浏览器之间是不共享COOKIE的。也就是说在你使用IE访问服务器时,服务器会把COOKIE发给IE,然后由IE保存起来,当你在使用FireFox访问服务器时,不可能把IE保存的COOKIE发送给服务器。

COOKIE与HTTP头  

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

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

COOKIE的覆盖 

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

django中的COOKIE语法

设置COOKIE:

1
2
3
4
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:

1
request.COOKIES  

删除COOKIE:

1
response.delete_COOKIE("COOKIE_key",path="/",domain=name)

jquery操作COOKIE 

练习

案例1:显示上次访问时间。 

案例2:显示上次浏览过的商品。

session

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

django中session语法

1
2
3
4
5
6
7
8
9
10
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。
     这用于确保前面的会话数据不可以再次被用户的浏览器访问
            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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()
  
  
10 用户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失效策略。

session配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,默认修改之后才保存(默认)

练习

1 登录案例 

需要的页面:
#login.html:登录页面,提供登录表单;
#index1.html:主页,显示当前用户名称,如果没有登录,显示您还没登录;
#index2.html:主页,显示当前用户名称,如果没有登录,显示您还没登录;

思考,如果第二个人再次再同一个浏览器上登录,django-session表会怎样?

2 验证码案例

验证码可以去识别发出请求的是人还是程序!当然,如果聪明的程序可以去分析验证码图片!但分析图片也不是一件容易的事,因为一般验证码图片都会带有干扰线,人都看不清,那么程序一定分析不出来。

 


转:https://www.cnblogs.com/dealdwong2018/p/10247221.html



推荐阅读
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
author-avatar
Th川_546
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有