集群的session共享问题 5C

大佬们帮忙看看。
shiro集群中一台服务器将session以sessionId保存在redis中,另一个服务器可以通过redis中的sessionId获取session。然后怎么表示用户在这台服务器上也显示登录了? 对这个网上查了半天资料也只是说明可以共享,对于取到session之后然后在怎么操作,还是默认这样就可以了?

4个回答

当新客户端发现一个HTTP请求时服务端会创建一个session.并分配一个sessionID作为服务端来客户端的识别,session对象会保存在服务端.此时session对象处天NEW STATE状态,如果调用 session.isNew()则返回true.

当服务器处理完后,会将sessionID同reponse 一起传回客户端,并将其存到cookie中;

当客户端再发送请求的时候.会将sessionID连同request一起发送给服务端;

服务端再根据传过来的sessionID将这次request与保存在服务端的session对象联系起来.此时的session对象已不是NEWSTATE状态.

这样循环多次.直到超时或销毁.

注:当禁用cookie时也是不能使用session的

都在同一个redis取 session 就是 共享session了 php内部在操作

都在同一个redis取 session 就是 共享session了 php内部在操作

session你可以就当作一个存在你服务器内存中的对象。http是无状态的所以只能用cookie啦,session啦使得这些状态能保存。集群下session同步问题,1,你可以服务器同步(太麻烦),2,你客户端cookie存了个sessionid,每次拿着这个问服务器我的session呢,a服务器有说,奥你登陆了ok,b服务器没有,你说我有sessionid啊,不行我不管你给我创建,这样也同步了。
3,你不是有redis这个不是集群的东西吗,你把session直接存在redis里面,cookie里面的sessionid去redis,redis就一个不用同步(集群redis有自己主从备份不操心),就相当于找个中间商,房东太多你不管了(服务器),找他中间商

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问