PHP实现负载均衡下的session共用功能

本文实例讲述了PHP实现负载均衡下的session共用功能。分享给大家供大家参考,具体如下:

最近忙于开发台湾运动彩券第四版的程序,所以已经很久没有上来写东西了,今天随便写点东西和大家分享.

首先说一下负载均衡,相信大家都知道负载均衡可以很好地解决网站大流量的问题,负载均衡就是把用户的请求分发到多态pc上进行处理,既然分发了请求那么session就要考虑好处理方法.传统情况下php会把session存入本机的暂存档内,可是这种情况下分发了之后session就丢失了,其实最简单的解决方法就是用memcache来托管,单独架设一台服务器用来作为memcache服务器(内存最好是大一点),接下来的工作就交给PHP代码来做就好了,这裡我不想修改php.ini,因为每台都改的话太累,而且我又比较懒

或许您会告诉我说直接修改一下php.ini的session存储位置就能写入memcache了,是,没错,但是这种方式却不能调用gc释放掉过期的会话,而今天我们要说的就是不但要让他托管,还得让他自动释放会话.

既然要做,那就要做到完美才行,下边是我的代码,不懂得自己看注释:

$_ENV=array(
  'SYS'=>array(
    'Memip'=>'127.0.0.1',      //MEMCACHE的ip
    'Mempt'=>11211,       //MEMCACHE的port
    'Memtim'=>10,          //MEMCACHE的超時時間
  )
);
//托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确
final class S{
  public static function open(){
  //禁止session自动开启
    session_write_close();
  ini_set('session.auto_start',0);
  //使用五十分之一的概率启动gc清理会话
  ini_set('session.gc_probability',1);
  ini_set('session.gc_divisor',50);
  ini_set('session.use_cookies',1);
  //session的寿命
  //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']);
  //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']);
  //ini_set('session.save_handler','files');
  //ini_set('session.save_path',Run.'_tmp');
  //ini_set('session.save_handler','memcache');
  //ini_set('session.save_path','tcp://127.0.0.1:11211');
    //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime');
  //建立memcache对象
  $_ENV['S_mem']=new Memcache;
  $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache連接失敗!');
    return TRUE;
  }
  /**
    读取
    返回:读到的內容
  /**/
  public static function read($id){
    return $_ENV['S_mem']->get('s_'.$id);
  }
  /**
    写入
    返回:bool
  /**/
  public static function write($id,$data){
    return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']);
  }
  /**
    关闭
    返回:bool
  /**/
  public static function close(){
    $_ENV['S_mem']->close();
    unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']);
    return TRUE;
  }
  /**
    刪除
    返回:bool
  /**/
  public static function destroy($id){
    return $_ENV['S_mem']->delete('s_'.$id);
  }
  /**
    清理
    返回:bool
  /**/
  public static function gc(){
    return TRUE;
  }
}
session_set_save_handler('S::open','S::close','S::read','S::write','S::destroy','S::gc');
$_ENV['sessionid']=(isset($_REQUEST['sessionid'])) ? trim($_REQUEST["sessionid"]) : session_id();
if($_ENV['sessionid']!=''){session_id($_ENV['sessionid']);}
session_start();

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php缓存技术总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

(0)

相关推荐

  • 实现PHP中session存储及删除变量

    首先大家需要了解一下,PHP中session什么意思?有什么用? session中文的意思可以表示为"会话",其本来的含义是指有始有终的一系列动作/消息,例如用户提问某个问题,然后被回答,这样一个完整的对话,就相当于一次会话. 而PHP session 变量就是用于存储有关用户会话的信息,或更改用户会话的设置.Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用. 但是session会话信息是临时的,在用户离开网站后就会被删除.如果需要永久储存信息,就需要把数据

  • redis 替代php文件存储session的实例

    redis 替代php文件存储session的实例 查看实例之前请先了解   PHP session_set_save_handler函数的用法 定义个SessionManager  类 class SessionManager { private $redis; public function __construct(){ $this->redis = new Redis(); $this->redis->connect('192.168.0.102', 6379); $retval

  • PHP实现负载均衡session共享redis缓存操作示例

    本文实例讲述了PHP实现负载均衡session共享redis缓存操作.分享给大家供大家参考,具体如下: 1.首先先创建html表单页面 <meta chatset='utf-8'> <center> <form action="se.php" method="post"> <table> <tr> <td>帐号:</td> <td><input type="

  • PHP实现用session来实现记录用户登陆信息

    PHP中session实现记录用户登录信息的问题,也是PHP面试题中比较常见的考点之一,是PHP学习者必须掌握的一个知识点. 对于初入门的PHP新手来说,或许有一定的难度.那么在之前的文章[PHP中session如何存储及删除变量的]中,也为大家介绍了PHP中session的基础含义,需要的朋友可以选择参考. 下面我们就通过具体的代码示例,为大家详细的介绍PHP中session实现记录用户登录信息的具体方法. 1.简单的登录界面代码示例: login.html <!DOCTYPE html>

  • php中session垃圾回收机制

    在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾.PHP会将其在内存中销毁:这是PHP的GC垃圾处理机制,防止内存溢出. GC的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟),就将该session删除. 当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability和session.gc_divisor

  • PHP实现分布式memcache设置web集群session同步的方法

    本文实例讲述了PHP实现分布式memcache设置web集群session同步的方法. php的session默认是文件存储: session.save_handler = files session.save_path = "/var/lib/php/session" 当做web集群,需要session同步时,将session存到分布式memcache来达到共享同步是个不错的办法 方法: 第1种: vi /etc/php.ini session.save_handler = memc

  • PHP+Session防止表单重复提交的解决方法

     index.php 当前表单页面is_submit设为0 SESSION_START(); $_SESSION['is_submit'] = 0; <form id="reg" action="post.php" method="post"> <p>用户名:<input type="text" class="input" name="username" i

  • PHP学习笔记之session

    cookie和session是web开发新手容易搞混的两个概念,弄清楚两者有助于对web交互更好的理解.个人认为session和cookie的区别主要有如下几点: cookie 信息保存在客户端 具体实现由客户端负责 数据大小和数量一般有限制 数据容易被窃取和篡改 session 数据保存在服务端 具体实现由服务器负责 数据大小和数量原则上无限制 安全性较高,可信度强 狭义的session指的是web会话中的session id以及关联的数据,广义的session指通信双方的交互会话.例如用户登

  • PHP实现负载均衡下的session共用功能

    本文实例讲述了PHP实现负载均衡下的session共用功能.分享给大家供大家参考,具体如下: 最近忙于开发台湾运动彩券第四版的程序,所以已经很久没有上来写东西了,今天随便写点东西和大家分享. 首先说一下负载均衡,相信大家都知道负载均衡可以很好地解决网站大流量的问题,负载均衡就是把用户的请求分发到多态pc上进行处理,既然分发了请求那么session就要考虑好处理方法.传统情况下php会把session存入本机的暂存档内,可是这种情况下分发了之后session就丢失了,其实最简单的解决方法就是用me

  • nginx负载均衡下的webshell上传的实现

    目录 场景描述 环境的安装 复现过程 存在的问题 解决方案 场景描述 假定在真实生产环境中,存在一个RCE漏洞,可以让我们获取WebShell 环境的安装 首先在GetHub上拉去漏洞的镜像前,需提前在centos上安装nginx和tomcat以及配置好nginx以及tomcat的相关配置文件,在使用docker将镜像拉取下来,进行漏洞的复现. 1.先将docker环境搭建起来 2.测试tomcat是否可以访问 根据上图可以看出,后端的tomcat是可以访问的 3.查看docker中nginx反

  • Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案

    1. 建议要同步的服务器为windows2003 sp2以上. 2. 确保要进行同步的计算机加入到域,并使用同一个域账户(最好是administrator)登录系统.系统没有开启防火墙.(没有加入域的话,请将计算机的aministrator账号的密码设为相同的密码,另外在每台机器的hosts文件中添加 计算机名ip,目的是让它们能够互相解析对方名称) 3. 开启Distributed File System服务和File Replication服务,并设置为自动运行. 4. 在各成员服务器的D盘

  • 如何解决asp.net负载均衡时Session共享的问题

    每个客户端在访问网站时,都会创建相应的Session,用来保存客户的状态信息,网站如果做了负载均衡,session共享是要做的,IIS对于session的存储有五种模式 一.ASP.Net session存储方式 1.InProc模式(进程内模式) .为默认设置. 会话状态存储在Web服务器上的内存中. 2.StateServer模式(状态服务器模式). 会话状态存储在一个名为ASP.Net状态服务的单独进程中.这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网路场中的多个W

  • Nginx服务器做负载均衡反向代理的超级攻略

    nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字.在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数. 例如: upstream backend { server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10; server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;; } 默认请求下,

  • 详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

    Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而Nginx是轻量级的服务器.Apache服务器稳定.开源.跨平台,但是Apache服务器不支持高并发,Nginx能支持处理百万级的TC

  • Linux 系统 nginx 服务器安装及负载均衡配置详解

    nginx(engine x) 是一个 高性能 的 HTTP 和 反向代理 服务器.邮件代理服务器以及通用的 TCP/UDP 代理服务器.其特点为轻量级(占用系统资源少).稳定性好.可扩展性(模块化结构).并发能力强.配置简单等. 本文主要介绍在测试环境中通过 nginx 实现基本的 负载均衡 功能. nginx 可以提供 HTTP 服务,包括处理静态文件,支持 SSL 和 TLS SNI.GZIP 网页压缩.虚拟主机.URL 重写等功能,可以搭配 FastCGI.uwsgi 等程序处理动态请求

  • nginx 负载均衡 多站点共享Session

    多站点共享Session常见的作法有: •使用.net自动的状态服务(Asp.net State Service); •使用.net的Session数据库: •使用Memcached. •使用Cookie方式实现多个站点间的共享(这种方式只限于几个站点都在同一域名的情况下): 这里我们就 演练一下 以数据库的形来存储Session,来实现多站点共享Session. 首先我们 建好一下站点,如下图: Default.aspx 其中 有二个Button  ,SetSession 主要是用于给一个 S

  • nginx+tomcat实现负载均衡,使用redis session共享

    环境准备 1.准备一台nginx服务器 ip192.168.1.133 端口81 安装过程: #首先安装依赖: yum -y install gcc-c++ yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install openssl openssl-devel #注意 : 安装nginx必须使用 root 用户安装 #创建一个nginx目录 mkdir /usr/local/src/nginx #进入到

  • 使用nginx来负载均衡 本文在window与linux下配置nginx实现负载

    实现网站负载有两种办法,一种是购买硬件来实现,比如是硬件F5再到Citrix Netscalar,这些设备都几十万,不是一般人玩的,另一种是使用软件来实现,比如nginx,squid这类有反向代理功能的软件,本文就nginx安装实现负载. 首先是windows系统,这里建议使用window 2003企业版,而不要作用win7(太新了,我遇到无法启动nginx的问题).要说的是,在windows下配置安装nginx还是很容易的,少了 linux下下载tar再配置编译参数等等步骤,我们只要从下面的地

随机推荐