目录
🚩Cookie
🚩Session
🚩Servlet API
🎈HttpServletRequest
🎈HttpSession
🚩Cookie
http请求header中一个属性,浏览器持久化存储数据的一种机制,网页无法访问主机的文件系统,要想存储数据就得通过其他的方式。
Cookie中保存的数据,也是键值对的格式(用户自定义的),最终还是要把这个键值对发送回服务器的,服务器要使用Cookie来完成一些业务逻辑。
其中有一个特殊的情况,是会使用Cookie存储当前用户的身份信息。
比如去了医院,先挂号,给你一个就诊卡,就诊卡就相当于cookie,就诊卡里就存储了用户的身份信息(身份标识)
拿着就诊卡去各个科室,见到医生之后,医生的第一句话,都是让你刷就诊卡。
刷卡这个过程,就会通过医院的系统,查询到你的身份标识,进一步的得到完整的身份信息,显示在医院的电脑上。
拿到身份标识之后就可以得到身份信息,这里的身份信息就是病人的基本信息,当前诊断信息,开的药品信息,既往病例,账户余额........
每个用户/患者都有一份这样的数据,这些数据在服务器中如何组织呢?(必然是存储在数据库中)/在服务器代码的逻辑展开执行的过程中,这些数据就也会被从数据库查询出来,先临时的保存到某个内存结构中,后续有什么修改之类的,修改内存,重写写入数据库。
这里的内存结构(存储的是用户的身份信息)——会话(session)
🚩Session
- Cookie是客户端存储数据的机制——在cookie中存储的用户身份标识,也经常会理解成sessionId
- Session是服务器存储数据的机制(不算持久化存储)——服务器存储了很多的session,每个用户都有一个自己的session,也有不同的sessionId
服务器会通过类似于hash这样的键值对结构来存储session的。sessionId就是key.session本身就是value,在session里面又可以存储各种的用户自身的信息(也就是程序员自定义的)
浏览器发出请求,请求中带有cookie,cookie是一种身份标识也就是sessionId,发出请求,请求就带有了cookie,cookie中呢,又保存了sessionId知道是查哪个用户信息,然后服务器就根据cookieId通过key-value方式找到session对象,就得到了这个用户的基本信息了。
🚩Servlet API
- Cookie是浏览器的机制,Servlet提供了api获取到Cookie
- Session是服务器的机制,Servlet内部已经实现好了,也提供了api可以让我们进行使用。
🎈HttpServletRequest
- Cookie[] getCookies()这个方法,拿到请求中所有的cookie内容,每个cookie都是一个键值对,Cookie对象就是一个键值对(name,value)
- HttpSession getSession()这个方法,就能够完成,从cookie中获取到sessionId,并且查询出对应session过程,如果sessionId没有从hash表查到,也能帮咱们自动创建出新的键值对(分配新的sessionId,以及创建一个新的HttpSession对象)【主要用于”登录”场景来使用,我们在输入了一个用户名之后,会自动给你查到你曾经存储在浏览器的密码)
我们说getCookie()方法是返回所有的cookie(也就是所有的用户),再从cookie中得到对应的sessionId,然后getSession()方法,也就是在你所要查询的sessionId中查到该用户的基本信息。
Servlet中,通过这个类,表示一个会话,服务器上同时具有很多个会话,服务器上就会存在一个类似于这样的HashMap<String,HttpSession>
String指的就是sessionId HttpSession也就是session对象
🎈HttpSession
- Object getAttribute(String name)
- void setAttribute(String name,Object value)
Session对象本身也是一个键值对结构
- name:张三
- age:22
- gender:男
- balance:500
这些键值对,就是通过上述的这两个Attribute方法来完成的。
- Stirng getName() 该方法返回 cookie 的名称。名称在创建后不能改变。(这个值是 SetCooke 字段设置给浏览器的)
- Sting getValue() 该方法获取与cookie关联的值
基于上述api实现用户登录
cookie/session机制,其中很重要的作用,就是辅助完成登录功能的实现。
活在明天,活在期待,不如活得今天很自在。