sabbath
2010-07-02 17:37
c向a b发送消息 a b看到消息 再比较指定用户是不是该注销 并同时返回给c一个消息 c看到返回也许是真的注销该用户 也许是更改用户信息

tianqiq
2010-07-04 22:18
我不知道你单点登录为什么要这要做。现在一般的方案是用memcache等做分布式缓存。具体怎么做你可以去

到网上找找。

但是你一定要这么做也是有办法解决的。 很简单你不就是怕用户从c认证后,就不再访问c了。只访问a,b了。

很简单的办法。你可以在你的 a,b的每一个页面里嵌入一小段c域上的资源,比方说一段js ,一张小图片等等。

不就可以。

sonnylys
2010-07-06 13:16
2010年07月04日 22:18 "tianqiq"的内容
很简单的办法。你可以在你的 a,b的每一个页面里嵌入一小段c域上的资源,比方说一段js ,一张小图片等等。

不就可以。 ...

用js我有想过的,如ajax异步去请求c,但a,b应用里的页面的document里的cookie并没办法拿到c服务器的session id,这样用ajax发过去的请求,每次都是不同的session.

sonnylys
2010-07-06 13:23
用session的生命周期来管理票据存活期及会员登录状态也不好实现,目前遇到问题是当session注销事情里并没法获取到cookie里的票。还有个办法是将session id作票据,当session注销时,在监听事情里就可以使用类似如下实现代码:

public void sessionDestroyed(HttpSessionEvent event) {

SSOServer server = ....

server.timeout(event.getSession().getId());

}

////这样在单认证服务器环境下是没问题的,但在集群环境下就有问题了:注销的session 不一定是生产ticket时的session。

sonnylys
2010-07-06 13:29
2010年07月02日 17:37 "sabbath"的内容
c向a b发送消息 a b看到消息 再比较指定用户是不是该注销 并同时返回给c一个消息 c看到返回也许是真的注销该用户 也许是更改用户信息 ...

假如a,b主机是集群环境下的相同应用,使用的域名都是www.abc.com, 那么,当c发消息的时侯,也就是请求www.abc.com,那么这个消息就只能到达a或者b其中一台主机,而另外一台就没法接收到c的消息。

不知我的理解正确不?

猜你喜欢