当前配置只对于相同的 一级域名 ,严格来讲就是相同的主域名,比如sojson.com
,本站用到的有 e.sojson.com
,ping.sojson.com
,www.sojson.com
,但是登录后怎么在其他域下面也是登录的呢?其实这样的结构最容易解决了,把 Session 的 Cookie 写到.sojson.com
即可,其他的二级、三级域名等等都可以读到这个 Cookie ,那只要存 Session 信息的库(各种 Cache )是同一个,就解决了。
那么来说说我的结构,我的 Session 共享是 Shiro 解决的。我开始没注意,还各种惆怅,这咋搞,总不能用个 cas 吧,就一个简单的网站,不至于吧。后来我看了看源码,才发现可以这样来。
我插入代码你就看明白了:
<!-- 会话Cookie模板 -->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="v_v-s-baidu"/>
<property name="httpOnly" value="true"/>
<property name="maxAge" value="-1"/>
<!-- 配置存储Session Cookie的domain为 一级域名 -->
<property name="domain" value=".sojson.com"/>
</bean>
<!-- custom shiro session listener -->
<bean id="customSessionListener" class="com.sojson.core.shiro.listenter.CustomSessionListener">
<property name="shiroSessionRepository" ref="jedisShiroSessionRepository"/>
</bean>
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="v_v-re-baidu"/>
<property name="httpOnly" value="true"/>
<!-- 配置存储rememberMe Cookie的domain为 一级域名 -->
<property name="domain" value=".sojson.com"/>
<property name="maxAge" value="2592000"/><!-- 30天 -->
</bean>
关键配置在于2处:
<property name="domain" value=".sojson.com"/>
这样已经就OK了。及时是多个项目,只要用的存储 Session DB( Redis 、 EHCache 、LevelDB
、 Memcache )是一个即可。