Session 和 Cookie 的区别
在网络通信过程中,使用的是HTTP协议,它是一种无状态协议,比如,在登录一个网站时,登录成功后,之后在访问这个网站的其他页面时,都需要重新登录,无法识别出当前用户是否已经登录了,不会保存用户的这个登录状态。所以,针对这种情况就是用cookie和session来保存用户的信息。
举个例子,在刚入大学时,学校就会收集新生的基本信息,例如,姓名,年龄,身份证号,手机号等,来保存到学校的教务系统中,但是,在这么多的学生信息中,学校是如何查询某个学生的具体信息呢,所以,学校就给每个学生都搞了一个学号,使得学号和学生的个人信息对应起来,在疫情那几年呢,学生进学校都需要刷学生证,通过刷学生证,在学校的教务系统中检查出来我是否是本校的学生,包括在学校内,我就可以拿着学生证去任何一个地方。所以,在这些角色里面,教务系统就相当于一个服务器,学生的信息就保存在服务器的session中,每个学生都会有一个session,学号就相当于是一个SessionId据,学生证就相当于是一个cookie,通过拿着学生证,学校就可以通过学生证中的学号从从教务系统中识别出我的身份,就能够去到学校的任何一个地方,如下图:
所以,在登录一个网站时,第一步就是,用户提供账号和密码,服务器就进行验证,第二部,服务器验证通过,会把用户信息存储在session中,然后会给客户端返回一个sessionId,第三步,客户端收到sessionId后,就会把sessionId存储到cookie中,第四步,之后每一次请求,都会把这个cookie给带上,服务器就可以通过在cookie里面存储的sessionid找到对应的session,从而获取用户的信息,检查当前用户是否已经登录过了。
而在代码中,并没有通过获取SessionId来获取Session,而是直接通过getSession就拿到了Session,这是因为,在getSession()这个方法的底层中,就是从Cookie中获取SessionId,并根据SessionId获取Session信息。
所以,Session和Cookie的区别主要有以下几点:
- Cookie是客户端存储数据的机制,Session是服务端存储数据的机制
- Cookie和Session之间,主要是通过SessionID关联的,SessionID就是Cookie和Session之间的桥梁
- Cookie和Session经常搭配使用,但是不是必须非要在一起使用,比如,SessionID也不一定非要通过Cookie传递,也可以通过URL传递
kie传递,也可以通过URL传递 - Cookie是可以造假的,所以不安全,而Session不会造假。