memcache 1.1.4
问题现象
启动Shiro整合memcache共享Session的项目,访问出现There is no session with id的问题
org.apache.shiro.session.UnknownSessionException: There is no session with id [6ec13a08-5ea9-488a-bbb3-0c9da209fb31]
at org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170) ~[shiro-core-1.4.0.jar:1.4.0]
at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236) ~[shiro-core-1.4.0.jar:1.4.0]
at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222) ~[shiro-core-1.4.0.jar:1.4.0]
at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118) ~[shiro-core-1.4.0.jar:1.4.0]
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:148) ~[shiro-core-1.4.0.jar:1.4.0]
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupRequiredSession(AbstractNativeSessionManager.java:152) ~[shiro-core-1.4.0.jar:1.4.0]
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.setAttribute(AbstractNativeSessionManager.java:256) ~[shiro-core-1.4.0.jar:1.4.0]
at org
问题排查一
由于项目是使用tomcat启动,因此查询相关资料,发现tomcat默认使用的SESSION参数名和shiro可能会冲突,需要修改参数。
但是查看代码发现,代码内已经是使用自定义参数名,因此不是这个问题引起的。
SimpleCookie cookie = new SimpleCookie("sid");
cookie.setHttpOnly(true);
cookie.setMaxAge(-1);
sessionManager.setSessionIdCookie(cookie);
问题排查二
跟踪代码发现,出现这个问题是通过memcache查询session时,session不存在导致的。
代码存放session,设置过期时间了,session怎么不存在?
存放代码如下:
private void saveSession(Session session) {
if (session != null && session.getId() != null) {
Date date = new Date();
date.setTime(date.getTime() + 1440 * 60 * 1000);
memCachedClient.set(session.getId().toString(),session,date);
}
}
进行查询memcache服务的时间,原来memcache 1.4.4版本的服务时间为1981年,因此导致只要一存放session立马就过期了。
解决办法
升级memcache版本为1.4.5即可解决该问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。