Maison  >  Article  >  développement back-end  >  Explication détaillée des cas de partage de session sous équilibrage de charge en PHP (avec code)

Explication détaillée des cas de partage de session sous équilibrage de charge en PHP (avec code)

php中世界最好的语言
php中世界最好的语言original
2018-05-16 15:52:502356parcourir

Cette fois, je vais vous apporter une explication détaillée du partage de session sous équilibrage de charge PHP (avec code). Quelles sont les précautions pour que PHP implémente l'équilibrage de charge sous partage de session ? ce qui suit est un cas pratique, jetons un coup d'oeil.

Tout d'abord, parlons de l'équilibrage de charge. Je pense que tout le monde sait que l'équilibrage de charge peut bien résoudre le problème du trafic important sur les sites Web. Il s'agit de distribuer les requêtes des utilisateurs vers des PC polymorphes pour les traiter. distribué, alors vous devez réfléchir à la manière de gérer la session. Traditionnellement, PHP stocke la session dans le fichier temporaire local. Cependant, dans ce cas, la session sera perdue après la distribution. En fait, la solution la plus simple consiste à utiliser Memcache pour. hébergez-le séparément. Configurez un serveur à utiliser comme serveur Memcache (il est préférable d'avoir une plus grande mémoire), puis laissez le prochain travail au Code PHP Je ne veux pas modifier php. .ini ici, parce que chacun C'est trop fatigant de tout changer, et je suis paresseux

Peut-être me direz-vous qu'il suffit de modifier l'emplacement de stockage de la session de php.ini pour écrire dans memcache , oui, c'est vrai, mais cette méthode ne peut pas appeler gc pour libérer la session expirée, et ce que nous voulons dire aujourd'hui n'est pas seulement de la laisser être hébergée, mais aussi de la laisser libérer automatiquement la session

. Puisque nous devons le faire, nous devons le faire. Il doit être parfait. Ci-dessous, mon code. Si vous ne savez pas lire les commentaires vous-même :

$_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_pisor',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();

Je crois que vous maîtrisez. la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de PHP !

Lecture recommandée :

Explication détaillée des étapes à suivre pour utiliser le cryptage de l'interface de développement de l'application php

php curl avec csrf -vérification des jetons Explication détaillée des exemples de soumission simulée

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn