cookie如果不设置过期时间的话,关闭浏览器就立马过期。
主要有以下四种方案:
将session数据保存在cookie中
即用cookie会话机制替代session会话机制,将session数据保存到客户端浏览器的cookie中,这样同一个用户访问同一网站时,无论负载均衡到哪台web服务器,都不用再去服务器请求session数据,而直接获取客户端cookie中的session数据。如此,同一个用户的登录状态就不会丢失了。
弊端:
- 必须要加密,否则有安全性问题
- cookie大小受限,能存放的信息有限
- 影响带宽
将session数据保存到MySQL数据库中
sessionid还是利用cookie机制存储到客户端,但session数据却存放在MySQL服务器上。(需要建立sessionid和session数据行的对应关系)
弊端:
- 用户量大的话,对mysql服务器影响非常大
将session数据保存到redis中
最好的方案,性能高很多,而且redis还支持过期机制。与session过期机制吻合。
弊端:实现相对麻烦一点
Session复制
通过web服务器的配置,将Session同步到其他web服务器上面,达到每个web服务器都保存一致的session。
弊端:需要依赖支持的Web服务器,一旦更换成不支持的Web服务器就不能使用了,在数据量很大的情况下不仅占用网络资源,而且会导致延迟。
Session粘滞
将用户的每次请求都通过某种方法强制分发到某一个Web服务器上,只要这个Web服务器上存储了对应Session数据,就可以实现会话跟踪。
优点:使用简单,没有额外开销。
缺点:一旦某个Web服务器重启或宕机,相对应的Session数据将会丢失,而且需要依赖负载均衡机制。
网友评论