对shiro的session的理解

以问答的形式

1:session的作用是什么?

和web容器中的session作用一样,就是用于记录浏览器和服务器之间的交互

2:登录状态和session有没有关系?

登录认证成功之后,shiro是将认证信息存储在session中的,以后的每次请求肯定会在过滤器中判断session中有没有认证信息,以作为放行的依据。

3:为什么要把session持久化,即为sessionDao?是为了分布情况下共享session吗?

把session持久化的原因有多个,分布式情况下共享session应该是原因之一;持久化就是通过sessionDao完成的。默认情况下,sessionDao的实现是MemorySessionDAO,即把session保存在内存中

也可以通过这篇文章了解:https://blog.csdn.net/ITWANGBOIT/article/details/102697522

4:sessionManager可以设置cacheManager?sessionDao也可以设置CacheManager?

通过查看源码发现:给sessionManager设置的CacheManager最终还是供sessionDao使用,目的就是持久化session到缓存中

5:Subject.login()登录成功后用户的认证信息实际上是保存在HttpSession中的。如果此时Web应用程序部署了多实例,必须要进行Session同步。

怎么实现?

6:SessionDao的作用到底是什么?

目的是为了将session持久化在内存中(MemorySessionDAO ),或者redis中(shiro-redis)

也可以通过这篇文章了解:https://blog.csdn.net/ITWANGBOIT/article/details/102697522

7:Shiro提供了Session的支持,主要用途是在Service层获取到Handler层的Session的信息,推荐在Handler层使用HttpSession。

实际上httpSession和ShiroSession是一样的,主要受SessionManager的控制。

8:会话验证调度器?

默认是开启的,用来验证session的是否过期

9:session的有效期可以设置,如果session被sessionDao存储了,那么到达有效期时,是不是也会被删除?

是的,sessionDao持久化session是有原因的,所以到了有效期,也是会删除session的

10:在用户未退出登录的情况下,关闭浏览器,然后再重新打开一个浏览器去访问系统,为什么展示的就是登录页面?

关闭了浏览器,cookie失效了,重新打开一个浏览器访问系统时,是没有带着cookie的,所以服务器会认为这是一个全新的访问者,会创建一个全新的session为这次请求服务,上次的session就坐等失效。

11:session到期

默认情况下,session到期后,shiro是让其重定向到登录页面,我们可以通过覆盖user过滤器,来改变shiro的重定向行为。

可以参考一下几篇文章:

https://www.iteye.com/blog/jinnianshilongnian-2028675

https://blog.csdn.net/qq_38526573/article/details/86661114

https://blog.csdn.net/ljxbbss/article/details/77771001

原文地址:https://www.cnblogs.com/hzcya1995/p/13302473.html