zoukankan      html  css  js  c++  java
  • PHP集群session共享

    集群的概念没有多复杂,其实就是多台电脑为了同一个目标在一起工作。在Web应用中,就是多个服务器提供一个站点的服务。

    搭建PHP集群的第一步就是设置负载均衡。

    默认情况下PHP是将session存在本地磁盘上的。那这两台主机之间如何共享session呢,接下来我们就来解决这个问题。

    PHP主机之间Session共享

    之前在网上看到过一种解决方式。由于PHP是将session存储在文件中,那我们可以在Nginx负载主机上面搭建一个分布式文件系统(NFS),让两台PHP主机的session都存放在此文件系统中。以此来达到共享session的目的。

    我个人比较倾向于将session存储到数据库中。因此这里我介绍的是将session存储到redis中。所以我们需要增加一台Redis服务器

    PHP默认情况下是不支持对Redis的操作的。所以这里我们需要自己手动安装第三方的扩展,使其支持对Redis的操作。关于如何使PHP支持Redis,我们可以参考《PHP操作Redis的两种方式》

    在这里我就认为我们的PHP已经支持Redis了。接下来是将session存储到Redis中,有两种方式:一种是直接修改PHP的配置文件php.ini;另一种是重写session机制。

    修改PHP配置文件php.ini将session存储到Redis中

    使用vim打开php.ini,需要修改的有这两项:session.save_handler和session.save_path。

    session.save_handler = Redis
    session.save_path = “tcp://192.168.5.114:6379”
    //Redis不需要密码验证
    session.save_path = “tcp://192.168.5.114:6379?auth=password”
    //Redis 需要密码验证

    修改完成,保存退出。然后重启php-fpm服务

    # kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
    # /usr/local/php/sbin/php-fpm

    两台PHP主机都做按照以上步骤操作。经过以上步骤,对于session的所有信息都保存到了Redis中。从而实现了session的共享。

    通过重写session机制将session存储到Redis中

    通常,在很多情况下我们是没有权限修改php.ini文件的。这时候我们可以通过重写session机制来修改session信息的存储。

    对于重写session,php已经为我们提供了SessionHandlerInterface 接口。我们只要实现这个接口就可以了。关于如何重写session机制,大家可以参考《PHP重写session机制》这篇文章。关于重写session的机制,该类的完整代码在github上,有兴趣的和可以点此查看

  • 相关阅读:
    学习Python第五天
    学习Python第三天
    Mongodb
    JMS links
    笔记整理
    a* products
    String
    business knowledge
    [Java coding] leetcode notes
    [Java Basics3] XML, Unit testing
  • 原文地址:https://www.cnblogs.com/flzs/p/14855687.html
Copyright © 2011-2022 走看看