做了项目才知道的Cookie和Session

之前对Cookie和Session的了解就是,Cookie是由服务器产生,保存于浏览器,而Session是保存于服务器中,每一个用户对应唯一一个Session,当我们用户登录的时候,会通过Cookie中的SESSIONID,来对应服务器中的SESSION,进而获取到SESSION中的信息,Session在Tomcat服务器中默认保存时长是30分钟(从最近一次访问Session计算30分钟后失效)

通过一个项目,我进一步认识了Cokie和SESSION,如果我们的服务器发生了高并发,可以理解为,在30分钟内有大量的访问,那么我们的服务器内就会保存大量的Session,这样一来,就会对服务器造成很大的压力(就算不是大量的访问,在服务器中保存Session,也会对服务器造成轻微影响),于是就有了下面的“Session”

解决服务器中保存Session的压力,是将Session中的数据保存到了数据库中,我们创建一个表,里面有SESSIONID和和userId,当有用户登录的时候,我们就通过Cookie里的SESSIONID,来对数据库查询SESSIONID得到userId,然后得到用户信息,可以实现Session的功能,但是,当发生高并发的时候,由于是数据库中查询得到的用户,我们无法知道当前用户对应的是哪个用户,于是多线程就派上用场了,给每一个用户建立一个线程,提起来线程就头疼,刚好有一个类ThreadLocal<T>,下图是官方解释,大致意思是,ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值,也就是说,我们可以把在数据库中查询到的信息set到ThreadLocal中,用的时候get就行了,最后用完记得remove(反正数据库中有,remove了也不怕)

发布了459 篇原创文章 · 获赞 298 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/HeZhiYing_/article/details/104736318
今日推荐