title: tomcat 使用 memcached管理session ,并且实现统一登录 CreateTime: 2011-11-25 14:59:00 UpdateTime: 2011-11-25 14:59:00 CategoryName: web --- --- title: "tomcat 使用 memcached管理session ,并且实现统一登录" date: 2011-11-25T14:59:00+08:00 draft: false tags: ["tomcat"] categories: ["web"] author: "springrain" --- ## 实现逻辑 把tomcat的session存放在memcached 的集中式缓存中,所有的tomcat共享memcached中的httpsession,能够很好解决tomcat的集群负载,不用使用笨重的session复制,也能轻松解决session数据的同步 把所有的jar文件复制到 tomcat/lib下 把context.xml 复制到 tomcat/conf 下,注意修改memcached的连接 后台的session是共享的,如果前台的JSESSIONID也是共享的,不就可以实现统一登录了吗? 在同一域名下 例如 test1.abc.com 和 test2.abc.com 浏览器是允许共享cookie的, 只需要把JSESSIONID的作用域设定为 abc.com 就可以了 修改 tomcat org.apache.catalina.connector.Request.java protected void configureSessionCookie(Cookie cookie) 这个方法 设置cookie作用域为主域名,例如 abc.com 最新的Tomcat7 已经可以自己定义jsessionid的作用域了.不需要再修改 request 了. ```xml ``` tomcat 6.0.32 和 tomcat6.0.33的Request是不同的 我已经处理好了编译好的 class Request.class 类在 tomcat/lib/catalina.jar/org/apache/catalina/connector ## 统一登录 关于统一登录sso,如果跨域名,可以通过iframe创建不同域名下的jsessionid.跨语言可以通过jsessionid直接从memcached中查找值,找到当前用户的登陆信息,我目前是开了一个服务(jsp页面)让第三方系统调用,因为是在同一个浏览器中打开,可以获取jsessionid作为参数传递,直接从memcached中查找登陆信息. ## 代码包 [tomcat-session.zip](/public/tomcat-session.zip)