session共享个人小结

一.需求问题:

    如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?

    这个时候会话id在客户端是没有问题的,  

    但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情况,

    于是session的共享就成了一个问题。

二.实现session共享方法:

  1.通过保存sessionID来获取对应session的值,

    php中,通过session_Id()函数能取到sessionID,session的值是保存在服务端的,我们可以将sessionID保存在cookie中,因为cookie是保存在客户端的。

    当用户请求后端数据时,首先获取保存在客户端的cookie中的sessionID值,在php中首先

    $sessionid =$_COOKIE['sesssionid'];

    session_id($sessionid)                //设置获取对应sessionid的session的值

    session_start()                           //此函数一定要在session_id()函数的后面

    之后就可以获取对应的session值

    ***此方法的sessionID保存在客户端,信息存储不安全,cookie也可以伪造

  2。

    利用nginx的基于访问ip的hash路由策略,

    保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。

    但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。

    而且客户端访问的服务器必须是这个nginx上,否咋ip获取不准确造成混乱。

  3。

    使用memcache和redis实现共享(个人首选)

    修改所有服务器 php配置文件里面的

    session.save_handler = files 改为session.save_handler = memcache /redis

    session.save_path = "127.0.0.1:11211或127.0.0.1:6379" 

    或者使用in_set()方法

    

  4.保存在数据库

    数据库需要同步,增加了数据库的i/o,一般不使用

       

    

    

原文地址:https://www.cnblogs.com/qqlong/p/8663014.html