转发:登录验证杂谈

红薯 发布于 2010/08/16 18:25
阅读 493
收藏 14

用户信息保存方式?

大家都知道http协议是无状态的,一般来说,用户登陆之后的认证信息是保存在服务端的。例如session里边,并通过session_id来标识 到这块session信息。问题是这种方式的扩展性不是很好,因为如果要做集群的时候就会发现session replication(节点多时效率不高)和session sticky(不支持failover)这两种方式都有明显的缺点。不过也有人希望能实现session共享(通过把session保存到 memcached,database等方式),这样做在可扩展性方面的确有了相当的优势。

当然如果你的session信息很少或者没用到session,就可以考虑cookie store方式或者纯cookie方式。cookie store方式我第一次是在rails里边看到的,等于把session的信息序列化之后加密存放到cookie里边去(其实和后面提到的只用 cookie的方式是一个道理)。只使用cookie的话,假设用户的id是1,可以把id,md5(id,ip,salt)存放到cookie里边去, 这样即使遇到cookie被盗,因为ip不同也还是验证不过。

其实并不推荐在session里边存放大量信息,可以把这些信息放到缓存系统里边就可以了,可以达到同样的效果。

SSO实现方式?

sso的登录验证方式的确是比较麻烦的,我找了一下资料,现在挺流行cas(Central Authentication Service),作为一个单独的应用来处理,有统一的入口,也只有这种方式才能做到真正的跨域验证。当然如果不需要跨域的话,用cookie的确是非常 方便的,可以在多个子域名里边共享(用纯cookie方式即可),像腾讯旗下多个子域名就可以共享到这些cookie。

我还看了一下sohu的实现(用firebug查看),每次登录之后都会发送类似http://passport.sohu.com/sso /crossdomain.jsp?action=login&domain=sogou.com&s=1277009711700这样 的请求,从url可以看出这是有点类似iframe隐藏提交的实现方式来的,毕竟需要sso的子系统数量也不会多到哪去,不会有多麻烦。

加载中
0
0
挨踢职业人
挨踢职业人
学习了。项目正需要这个哦,想多找找这方面的资料……站长可否提供一些?
0
sunjm
sunjm

需要中。。。

返回顶部
顶部