当前位置: 首页 > 架构相关 > 有负载均衡时,session应该如何保存

有负载均衡时,session应该如何保存

        在没有负载均衡时,说明你的访问量还不够大,php自带的session机制是完全够用的。


        默认情况,php中session保存在文件中。 php.ini中(session.save_handler)可以设置。session的目录由session.save_path指定,如果设置的session很多(不建议),也可以分级目录来保存session具体设置方式是 session.save_path="N;session_path",N就是目录结构的级数。

        如果用到了负载均衡,很有可能是多台服务器公用session,如何做到,session的分布式存储呢?那么具体的解决方法就是专门用一台服务器进行session的存储,利用redis来存储是再好不过的了,在存储session的时候,会先调用session_start()这个函数,这个函数的作用就是向客户端浏览器种植一个cookie,这个cookie就是用户的唯一标示,但是如果用户禁止cookie的话那么只能用url来传递这个唯一的标示。但是我在各个大型网站。包括百度、360、阿里。他们的做法是如果用户禁止了cookie那么登录都是不让登录,所以,最好不要用url来传递。

        有了这个唯一的cookie标识。根据这个标识来向redis存储数据,每个用户的数据就可以存储到redis中了。如果你能细细想的话,只用cookie+redis就可以做到分布式的”session“存储,这里的session就是会话的意思,完全可以抛开php的session机制。session的目的就是将数据存储到服务器上以保证数据的安全,那我用一个唯一的不重要字串做cookie标识(其实也就是相当于session_start时生成的cookie),根据这个标识在redis存储数据,这不也是session的机制吗。所以你只要记住,什么分布式session存储、cookie+redis就够了。


转载时请以 超链接的形式 注明:转自Ferman

                  

About me