什么是SESSION?什么是cookie

1,背景介绍



生活中的小例子

我们去火车站或者通过手机app买到的火车票都会用到身份证,然后根据身份证取票上车,在你进入车站上车到站下车等等一系列的任何操作,都只是出示了火车票,列车员也是通过查看火车票,让不让你上车,这个火车票就类似于cookie,(买奶茶,地铁票,等等等)

1,由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie,

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie

客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。实际就是颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理,

cookie可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些 Cookie,如果 Cookie很多,这无形地增加了客户端与服务端的数据传输量,而 Session的出现正是为了解决这个问题。同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie值,而是只要传回一个 ID,这个 ID是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的 ID,客户端只要传回这个 ID就行了,这个 ID通常是 NANE为 JSESIONID的一个 Cookie。

2,知识剖析

cookie机制

cookie的内容主要包括name(名字)、value(值)、maxAge(失效时间)、path(路径),domain(域)和secure,

name:cookie的名字,一旦创建,名称不可更改。

value:cookie的值,如果值为Unicode字符,需要为字符编码。如果为二进制数据,则需要使用BASE64编码.

maxAge:cookie失效时间,单位秒。如果为正数,则该cookie在maxAge后失效。如果为负数,该cookie为临时cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该cookie。如果为0,表示删除该cookie。默认为-1

path:该cookie的使用路径。如果设置为"/sessionWeb/",则只有ContextPath为“/sessionWeb/”的程序可以访问该cookie。如果设置为“/”,则本域名下ContextPath都可以访问该cookie。

domain:域.可以访问该Cookie的域名。第一个字符必须为".",如果设置为".google.com",则所有以"google.com结尾的域名都可以访问该cookie",如果不设置,则为所有域名

Session机制

Session机制是一种服务端的机制,服务器使用一种类似散列表的结构来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端里的请求里是否已包含了一个session标识--sessionID,如果已经包含一个sessionID,则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用

如果客户端请求不包含sessionID,则为此客户端创建一个session并且声称一个与此session相关联的sessionID,sessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串(服务器会自动创建),这个sessionID将被在本次响应中返回给客户端保存。

cookie和session适用的场景

从能实现的功能来说,cookie,session差不多,但是cookie可以伪造,session保存在服务器,除非被黑了,否则不会被非法修改。因此一般来说认证数据放在session,sessionid存在cookie上。但是利用加密技术,也有人把认证数据放在cookie,对cookie加密验证。 cookie最典型的应用是: (一):判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。 (二):另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信息,当然这里面有了安全和性能问题需要我们考虑了。

3、常见问题

Cookie的优缺点有哪些?

Session的优缺点有哪些?

4.解决方案

COOKIE优缺点
优点: 极高的扩展性和可用性

1) 数据持久性。

2) 不需要任何服务器资源。 Cookie 存储在客户端并在发送后由服务器读取。

3) 可配置到期规则。 控制 cookie 的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的 cookie 。

4) 简单性。 基于文本的轻量结构。

5) 通过良好的编程,控制保存在 cookie 中的 session 对象的大小。

6) 通过加密和安全传输技术( SSL ),减少 cookie 被破解的可能性。

7) 只在 cookie 中存放不敏感数据,即使被盗也不会有重大损失。

缺点
1) Cookie数量和长度的限制

数量:每个域的cookie总数有限, IE6 或更低版本最多20个cookie,IE7和之后的版本最多20个cookie,Fiefox最多50个cookie,chrome和safari没有做硬性限制,长度:每个 cookie 长度不超过 4KB ( 4096B ),否则会被截掉。

2) 潜在的安全风险 。Cookie 可能被拦截、篡改。如果 cookie 被拦截,就有可能取得所有的 session 信息

3) 用户配置为禁用 。有些用户禁用了浏览器或客户端设备接受 cookie 的能力,因此限制了这一功能。

4) 有些状态不可能保存在客户端 。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

SESSION优缺点

优点:session用新的机制保持与客户端的同步,不依赖于客户端设置


1、与cookie相比,session是存储在服务器端的信息,因此显得更为安全,因此可将身份标示,购物等信息存储在session中;

一般是寄生在Cookie下的,当Cookie被禁止,Session也被禁止 当然可以通过url重写来摆脱cookie,当用户访问量很大时,对服务器压力大

我们现在知道session是将用户信息储存在服务器上面,如果访问服务器的用户越来越多,那么服务器上面的session也越来越多, session会对服务器造成压力,影响服务器的负载.如果Session内容过于复杂,当大量客户访问服务器时还可能会导致内存溢出。

用户信息丢失, 或者说用户访问的不是这台服务器的情况下,就会出现数据库丢失.

不要混淆 session 和 session 实现。

本来 session 是一个抽象概念,开发者为了实现中断和继续等操作,将 user agent(代理人) 和 server (服务器)之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。

而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。可以认为是 session 的一种后端无状态实现。

而我们今天常说的 “session”,是为了绕开 cookie 的各种限制,通常借助 cookie 本身和后端存储实现的,一种更高级的会话状态实现。

所以 cookie 和 session,你可以认为是同一层次的概念,也可以认为是不同层次的概念。具体到实现,session 因为 session id 的存在,通常要借助 cookie 实现,但这并非必要,只能说是通用性较好的一种实现方案。

参考文献
文献一:  https://segmentfault.com/a/1190000013258488


文献二: https://www.zybuluo.com/Dukebf/note/856502<

猜你喜欢

转载自blog.csdn.net/qq_42008387/article/details/80803983
今日推荐