作者:王瑾瑜2702935333 | 来源:互联网 | 2023-09-24 18:17
前言最近在学习Python网络编程,已经实现了简单的服务器和浏览器的信息交互。正在进一步学习Cookie和Session(可能还有Token),所以写一篇随笔来加深自己的理解。一、
前言
最近在学习 Python 网络编程,已经实现了简单的服务器和浏览器的信息交互。正在进一步学习 COOKIE 和 Session(可能还有 Token),所以写一篇随笔来加深自己的理解。
一、COOKIE 是什么
COOKIE,有时也用其复数形式 COOKIEs,指某些网站为了辨别用户身份、进行 Session 跟踪而储存在用户本地终端上的数据(通常经过加密)。【来源:百度百科】
简言之,COOKIE 是服务器和浏览器通信的一项内容。用于实现本地的持久化。服务器可以在返回给浏览器的数据中加入 Set-COOKIE 字段。浏览器会把这个字段的内容保存下来,然后再以后的每次请求中自动加入 COOKIE。这样,服务器在收到请求的时候,就可以识别请求发送方的身份,从而给出一些个性化的响应。
所以 COOKIE 就是服务器给客户端加的一个识别标签,这个标签保存在客户端,每次请求数据时会通过浏览器发送给服务器。同时,服务器上会保存与这个标签相关联的其他用户数据,比如用户名。COOKIE 有如下属性:
属性 |
介绍 |
name |
COOKIE的名字 |
value |
COOKIE的取值 |
expires |
过期时间,如果这个属性不指定的话,就是“session COOKIE”,也就是这个session在关闭浏览器后会被删除 |
path |
COOKIE的作用域,子文件夹下的网页可以访问父文件夹下的网页生成的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,就是让网站中所有其他的网页都能读取到的,所以应该将其设置为‘/‘。 |
domain |
COOKIE的所属域名,默认是全域名,例如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