【session共享】如果有多台机器,怎么解决Session共享问题

【 问题由来】

首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情况,于是session的共享就成了一个问题。 

【解决办法】

  1. php支持把会话数据存储到某台memcache服务器
  2. 也可以手工把session文件存放的目录改为nfs网络文件系统,从而实现文件的跨机器共享。 
  3. 还有一个简单的办法可以用于会话信息不会频繁变更的情况,在机器a设置用户会话的时候,把会话数据post到机器b的一个cgi,机器b的cgi把会话数据存下来,这样机器a和b都会有同一份session数据的拷贝。
  4. 除了上述提及的方法外,解决session共享问题还有这样一种方式:(实质上并不是通过session的共享来解决的)这里以nginx为例,将用户请求分发到了不同机器上,那么我们只需要固定,同一用户请求分发到同一机器上进行处理,即这一次用户来请求服务器了,那么下一次它再来的时候,同样也请求也被分发到与上一次相同的服务器。这样就确保了同一用户不会因为请求分发到不同机器上而获取不到session数据的问题了。 

猜你喜欢

转载自blog.csdn.net/maguangwithc/article/details/80071863