以问答的形式
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