如何配置多台Nginx代理服务器?如何实现session共享
如果是同域名,一般是借用sessionid(cookie)。
其实关键问题是session的数据保存的路径问题,在session里,可以设定N个tomcat,设定session保存的介质相同就可以了。 最好,可以考滤用数据库介质。
是基于client cookie做的。
就是把session存在客户端cookie中。
这样可以避免淘宝分布式多台服务器session共享问题。
每次访问服务器,先验证客户端cookie。
数据库或者memcache 共享session
以下为转帖
Weblogic Server对所有的应用程序设置的cookie的路径都是/,这是不是意味着在Weblogic Server中默认的就可以共享 session了呢?然而一个小实验即可证明即使不同的应用程序使用的是同一个session,各个应用程序仍然只能访问自己所设置的那些属性。
对于这样一种结构,在 session机制本身上来解决session共享的问题应该是不可能的了。除了借助于第三方的力量,比如使用文件、数据库、JMS或者客户端 cookie,URL参数或者隐藏字段等手段。
还有一种较为方便的做法,就是把一个应用程序的session放到ServletContext中,这样另外一个应用程序就可以从ServletContext中取得前一个应用程序的引用。示例代码如下,
应用程序A
contextsetAttribute("appA", session);
应用程序B
contextA = contextgetContext("/appA");
HttpSession sessionA = (HttpSession)contextAgetAttribute("appA");
值得注意的是这种用法不可移植,因为根据ServletContext的JavaDoc,应用服务器可以处于安全的原因对于contextgetContext("/appA");返回空值,以上做法在Weblogic Server 81中通过。
那么Weblogic Server为什么要把所有的应用程序的cookie路径都设为/呢?原来是为了SSO,凡是共享这个session的应用程序都可以共享认证的信息。一个简单的实验就可以证明这一点,修改首先登录的那个应用程序的描述符weblogicxml,把cookie路径修改为/appA 访问另外一个应用程序会重新要求登录,即使是反过来,先访问cookie路径为/的应用程序,再访问修改过路径的这个,虽然不再提示登录,但是登录的用户信息也会丢失。注意做这个实验时认证方式应该使用FORM,因为浏览器和web服务器对basic认证方式有其他的处理方式,第二次请求的认证不是通过 session来实现的。
0条评论