手拉手带你走进Cookie和Session

· · 个人记录

0. 引言

记得那是在很久很久以前,某蒟蒻:哇,冬日绘板开了!

(兴奋尝试后)?这什么呀,点上去的点几秒就没了,别的dalao是怎么做到的啊!

这时,某dalao抛给他一个Cookie

那是什么呀?饼干?能吃吗?

1.Cookie

1.1 Cookie是啥?

$Cookie$是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 举例:$B$站登录时有一个小框框“记住我”,勾选后下次登录会自动登录,是通过$Cookie$查询历史记录的。 想来真是又可怕又方便。所以,把$Cookie$用好是很重要的! ### $1.2$ 咋看$Cookie$? 此处以$360$浏览器为例: - 点击右上角打开菜单,里面有设置栏,点进去; ![](https://cdn.luogu.com.cn/upload/image_hosting/3vrxwhg2.png) - 点击左边一栏中的“高级设置”; ![](https://cdn.luogu.com.cn/upload/image_hosting/uxwggtw7.png) - 点击“网页内容高级设置”; ![](https://cdn.luogu.com.cn/upload/image_hosting/05r0wlm9.png) - 之后就能看到$Cookie$的所有选项啦,一般设置为允许设置本地数据。点击“所有$Cookie$和网站数据”就能看$Cookie$里的存档了。 ![](https://cdn.luogu.com.cn/upload/image_hosting/rgpzbvxs.png) ### $1.3$ $Cookie$的实现原理? $Cookie$是由服务器生成,发送给浏览器,浏览器把$Cookie$以$Key-Value$的形式保存到某个目录下的文本文件内,下一次请求同一个网站的时候会把该$Cookie$发送给服务器。由于$Cookie$是存在客户端上的,所以浏览器加入了一些限制确保$Cookie$不会被恶意使用,同时不会占据太多的磁盘空间,每个域的$Cookie$数量都是有限的。 ![](https://cdn.luogu.com.cn/upload/image_hosting/s63wz9k2.png) - 图为$http$请求 $+$ $Cookie$的交互过程。(来源:https://www.cnblogs.com/shijianchuzhenzhi/p/6387013.html) 如果步骤$5$中$Cookie$过期或错误,剩下过程将会中断。 ### $1.4$ $Cookie$咋写? 一般$Cookie$的脚本由$JS$或者$python$语言实现。 这里给大家提供一些常规命令行,可以用于删除$Cookie$数据: $Internet$ 临时文件: $RunDll32.exe InetCpl.cpl,ClearMyTracksByPRocess 8 $RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2

历史记录:

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1

表单数据:

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16

密码:

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32

删除全部:

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255

以上为Cookie有关内容

2.Session

2.1 Session是啥?

一次浏览给客户端发一个会话标识($sessionId$,就是一个随机的字符串),每个客户端收到的都不一样,每次客户端向服务端发起$HTTP$请求的时候,就会把这个随机字符串($sessionId$)一并捎过来,这样就能区分开是哪个用户发起的请求了。 $Session$对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的$Web$页之间跳转时,存储在 $Session$对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。 服务器开辟了一块空间专门存放$Session$,这个空间叫做$Session$池,$Session$池中可以存放多个$Session$,每个$Session$对应一个客户端(浏览器),比如打开$360$浏览器与$IE$浏览器这就是$2$个客户端,此时在$Session$池中会存在$360$浏览器对应的$Session$与$IE$浏览器对应的$Session$,而每个客户端都会去找自己对应的$Session$。 ### $2.2$ $Session$的工作原理? $Session$主要有三种工作方式: 1. 基于 $URL Path Parameter$,默认支持。 2. 基于 $Cookie$,如果没有修改 $Context$ 容器的 $cookies$ 标识,默认也是支持的。 3. 基于 $SSL$,默认不支持,只有 $connector.getAttribute("SSLEnabled")$ 为 $TRUE$ 时才支持。 ![](https://cdn.luogu.com.cn/upload/image_hosting/xwnbyw7w.png) 上图为基于$Cookie$实现的运行图,步骤如下: 1. 首先客户端(浏览器)发送请求到服务器 2. 请求里面会把客户端(浏览器)所有的$Cookie$带上 3. 服务器接收到请求 4. 内部开始处理,首先从客户端(浏览器)带过来的$Cookie$里面获取$SessionID
  1. SessionIDSession池中查询

  2. 如果没有查询到对应的SessionSessionID是空,重新新建一个SessionSession池中

  3. 如果查询到了直接获取对应Session

  4. 把数据存入客户端(浏览器)带过来的Cookie,其中就有SessionID,响应给客户端(浏览器)

  5. 客户端得到响应并把Cookie储存起来

  6. 接着从1-9循环

关于SessionCookie结合,我找到了这个网站,大家可以了解。

以上为Session内容

3. 写在最后

由此可见,网络的运行程序还是很复杂的,只有学会网络的运行原理及程序,我们才能更好地用网络!