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

【Python】Cookie和Session

前言最近在学习Python网络编程,已经实现了简单的服务器和浏览器的信息交互。正在进一步学习Cookie和Session(可能还有Token),所以写一篇随笔来加深自己的理解。一、

前言

最近在学习 Python 网络编程,已经实现了简单的服务器和浏览器的信息交互。正在进一步学习 COOKIE 和 Session(可能还有 Token),所以写一篇随笔来加深自己的理解。

 

一、COOKIE 是什么

COOKIE,有时也用其复数形式 COOKIEs,指某些网站为了辨别用户身份、进行 Session 跟踪而储存在用户本地终端上的数据(通常经过加密)。【来源:百度百科】

简言之,COOKIE 是服务器和浏览器通信的一项内容。用于实现本地的持久化。服务器可以在返回给浏览器的数据中加入 Set-COOKIE 字段。浏览器会把这个字段的内容保存下来,然后再以后的每次请求中自动加入 COOKIE。这样,服务器在收到请求的时候,就可以识别请求发送方的身份,从而给出一些个性化的响应。

所以 COOKIE 就是服务器给客户端加的一个识别标签,这个标签保存在客户端,每次请求数据时会通过浏览器发送给服务器。同时,服务器上会保存与这个标签相关联的其他用户数据,比如用户名。COOKIE 有如下属性:




































属性介绍
nameCOOKIE的名字
valueCOOKIE的取值
expires过期时间,如果这个属性不指定的话,就是“session COOKIE”,也就是这个session在关闭浏览器后会被删除
pathCOOKIE的作用域,子文件夹下的网页可以访问父文件夹下的网页生成的COOKIE,但是反过来却不能。例如在/路径下生成了COOKIE_a,在/sub路径下生成了COOKIE_b,则/路径下只能读取COOKIE_a,而/sub路径下可以读取COOKIE_a和COOKIE_b。注意,如果不设置这个属性的话,默认使用的是当前的url的相对路径,例如在url http://www.a.com/some/page.php中设置COOKIE时没有指定path路径,则它的path属性为/some。一般我们设置COOKIE,就是让网站中所有其他的网页都能读取到的,所以应该将其设置为‘/‘。
domainCOOKIE的所属域名,默认是全域名,例如www.somesite.com。当然也可以自己指定根域名,即somesite.com,这样的话如果当前网站旗下有子域名网站的话,例如a.somesite.com b.somesite.com之类的子域名,那么在子域名所在网站中也能读取这个COOKIE。
secure这个属性是针对https来说的,如果设定其为true的话,那么只有在请求当前网站的https的地址的时候,才能读取出来。
httponly这个属性设置js对于当前COOKIE的读取权限,如果为true,则js无法读取修改当前COOKIE

 

 

二、Session 是什么

我的理解(待修正)。

Session 从字面解释,就是“会话”,浏览器和服务器建立了一次会话,那么服务器怎么知道会话的对方是谁呢?常见的是通过用户名和密码进行验证。但是如果每次访问都需要验证就太麻烦了,所以,在一次验证之后,服务器在返回的 COOKIE 中加入一个字段,Session_id,通常是一个随机字符串。在服务器中,通过 Session_id 对当前用户的若干信息进行关联(比如用户名、出生年月等),这样服务器就可以借用 COOKIE 中的 Session_id 来识别会话对象。Session 相对于 COOKIE 技术的优点在于它是加密的,由于 Session_id 是一个随机字符串,所以,无法在 COOKIE 中直接伪造访问者的身份信息。当然,如果 Session_id 被截获,仍然是可以冒充身份进行访问的。

 

三、如何实现 COOKIE

简单的方法就是在请求和响应中加入 COOKIE 字段。

COOKIE 的内容保存在浏览器端。

Session 的数据保存在服务器端。

 

四、待解决的问题

Session 是否是永久的? 

 

参考文献:

https://github.com/alsotang/node-lessons/tree/master/lesson16

https://www.zhihu.com/question/19786827/answer/28752144

https://www.cnblogs.com/moyand/p/9047978.html


推荐阅读
  • 本文介绍了一个简单的Python函数,该函数能够接收一个日期作为输入,并返回这一天是星期几。此功能通过使用Python的datetime模块实现。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • 本文详细介绍了如何手动编写兼容IE的Ajax函数,以及探讨了跨域请求的实现方法和原理,包括JSONP和服务器端设置HTTP头部等技术。 ... [详细]
  • 本文详细介绍了MySQL在Linux环境下的主从复制技术,包括单向复制、双向复制、级联复制及异步复制等多种模式。主从复制架构中,一个主服务器(Master)可与一个或多个从服务器(Slave)建立连接,实现数据的实时同步。 ... [详细]
  • Spring Boot 应用程序实现开机自启的步骤
    本文介绍如何将Spring Boot项目打包成的JAR文件配置为系统启动时自动运行的方法,包括创建批处理文件和设置任务计划等步骤。 ... [详细]
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 本文介绍了如何利用Python的Turtle库来绘制奥运五环。通过设置不同的颜色和位置,能够精确地模拟奥运标志。 ... [详细]
  • 本文基于https://major.io/2014/05/13/coreos-vs-project-atomic-a-review/的内容,对CoreOS和Atomic两个操作系统进行了详细的对比,涵盖部署、管理和安全性等多个方面。 ... [详细]
  • 在Backbone框架中,视图(View)的操作至关重要,包括模板渲染及事件处理等。为了提升代码的可读性和维护性,通常建议将界面根据功能拆分为多个视图。本文将探讨如何在父子视图间有效地传递值,并指出在实现过程中应注意的关键点。 ... [详细]
  • 如何在百度网盘中创建目录树结构?
    本文将详细介绍如何利用特定工具从百度网盘生成详细的目录树结构,帮助用户更好地管理和查找文件。 ... [详细]
  • 本文探讨了C#中所有内置数据类型如何通过默认构造函数初始化,并提供了一个示例方法来展示这些类型的默认值。 ... [详细]
  • 随着科技的快速发展,Web前端设计也在不断创新,出现了多种新颖的布局技术。本文将重点探讨两种常见的布局方法——圣杯布局与负边距布局,旨在帮助开发者更好地掌握页面布局技巧。 ... [详细]
  • WorldWind源代码解析:瓦片调度机制详解
    本文深入探讨了WorldWind项目中的关键组件——瓦片调度策略。通过源代码分析,我们将了解摄像头移动时如何动态调整瓦片的加载与卸载,确保地图渲染的高效与流畅。 ... [详细]
  • 本文介绍如何使用Python编写一个简单的爬虫程序,从知乎问题页面抓取美腿图片。环境配置包括Windows 10操作系统,Python语言及其相关库。 ... [详细]
  • 本文介绍了在处理财务凭证查询时,如何实现从插入或修改页面返回至原始查询结果页面,并确保数据保持最新状态的方法。通过使用JavaScript和Java的Session管理技术,解决了动态页面中AJAX调用失效的问题。 ... [详细]
author-avatar
王瑾瑜2702935333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有