集群下的session共享总结及问题

人头马没面 发布于 2012/12/08 10:35
阅读 9K+
收藏 12

      最近公司需要实现websphere集群的session共享,websphere集群本身支持共享,但是添加、删除节点还是需要重启服务才行(如果不是,请指正)。最近一直在骚扰@红薯 ,希望了解OSC的实现,现在也总结一下。

    1.如果不是用websphere,而是tomcat,那么就可以选择msm实现session共享。(因为用websphere,所以不可行)

    2.用memcached来实现session共享,无法解决单点故障问题。(不可行)

    3.用redis来实现session共享,支持主从复制,但是要实现自动的failover需要配合keepalived,并且需要编写脚本,redis集群至今也没出来。(不可行)

    4.使用membase来实现session共享,membase完全兼容memcached,并且提供集群、failover功能,但资料较少,大体用了一下,感觉不是自己想要的效果。(暂不可行)

    5.osc使用的完全基于cookie的session共享,将userid、password等组合加密,需要时从cookie解析出userid等来使用就行,相关代码@红薯也已开源,在代码区可自行搜索。这种方式不使用memcached等等,不存在单点故障问题。(可行)

    我的问题是session里需要存储一些别的信息,诸如注册时验证码、登录后权限等信息,如果完全基于cookie,这些内容如何存储?

加载中
0
景愿
景愿

OSC是单tomcat,没有集群,任何系统session多多少少都要存点东西

两种方案:

1 应用服务器自身实现session复制,

2 使用memcached 或者redis 实现共享session,

你应该去考虑websphere如何集群或者解决memcached单点鼓掌和redis复制问题

cookie保存session信息绝对不靠谱

人头马没面
人头马没面
嗯 1、2、3、4中都提到了websphere集群和memcached等集群都不好做 所以才来请教啊
0
红薯
红薯
做集群的第一步就是废弃 session,否则你就等着痛苦吧
Jason阿坚
Jason阿坚
79
zfc827
zfc827
这个是必须的,session 复制除了把事情搞复杂还有什么用?
人头马没面
人头马没面
回复 @红薯 : 明白了 那就使用cookie+membase吧
红薯
红薯
回复 @nyuxiao : 你可以存在内存里,你可以存磁盘里,你也可以存 memcached 里,这不算是个事
人头马没面
人头马没面
嗯 有道理 但是需要存储到session的一些东西怎么存储呢 有没有什么方案
0
JFinal
JFinal
做集群遵守 Restful 就行,所以 session 是要废弃的
人头马没面
人头马没面
? 到现在也还是没弄明白Restful 感觉就是?传参改成了约定传参 如?name=tom变成了/user/tom 然后丰富了get post为get post put delete,后两种服务器一般还不支持 还需要应用进行处理 仅仅理解到这个层面 Restful跟session的关系是? 达人请指教。
0
开源狂人
开源狂人
如果客户端禁用cookie,你还觉可行吗
人头马没面
人头马没面
回复 @红薯 : 百度也是如此,禁用cookie,无法登录
开源狂人
开源狂人
我只想告诉作者没有完美方案而已,cookie在安全性和容量上都不理想,要做的事不比其他方案少,
红薯
红薯
没有几个客户端会禁用 cookie 的,而且禁用 cookie 后肯定不允许登录,这是名正言顺的
0
mallon
mallon

session is evil

session是生搬硬造出来的理论上实际上根本不存在的东西

0
人头马没面
人头马没面
存储到session的东西怎么存储 方案啊
0
橙汁儿
橙汁儿
nginx 的 ip_hash,基于传统数据库,基于分布式缓存/nosql: redis,couchbase ,mongodb 
人头马没面
人头马没面
回复 @橙汁儿 : 哦 这样子啊
橙汁儿
橙汁儿
couchbase也有单点问题,单点挂一个,那个点的数据在即群里就找不到了
人头马没面
人头马没面
nginx的ip_hash也存在单点问题,传统数据库不易于处理session超时(指后台管理系统),redis等存在单点问题,我决定研究研究membase/couchbase,用cookie+membase/couchbase来处理了
0
osrchina
osrchina
tnnd,我也要搞这个了。。。。。楼主,你用redis 复制session 实验过了吗
osrchina
osrchina
回复 @人头马没面 : 把你的操作过程能分享下吗?
人头马没面
人头马没面
搞了 没想象的那么复杂 现在还没实现redis主从自动切换 正在研究中 实现后就可解决redis的单点问题了 基本上就完工了
0
人头马没面
人头马没面

引用来自“os4china”的答案

tnnd,我也要搞这个了。。。。。楼主,你用redis 复制session 实验过了吗
@os4china 可以啊 用户登录时生成cookie 如果用户选择了记住登录 就给cookie设置一个过期时间 1年 如果用户没选择记住登录 就不设置过期时间 这样用户关闭浏览器后 cookie自动删除了 生成cookie时生成一个字符串 用于用户的唯一标识 并将该字符串 作为键 “id”  用户id 作为filed value 存入redis 需要验证用户是否登录时 就拿cookie中的字符串到redis中查询是否存在 如果需要用户id信息 同样用该字符串去redis中取即可
osrchina
osrchina
好办法
0
三朵

我也是遇到了这个问题,跪求你的劳动成果   高手

人头马没面
人头马没面
? 你先看看上面的评论 如还有问题 我会尽量解答 好不 刘三朵
返回顶部
顶部