ホームページ  >  記事  >  バックエンド開発  >  PHPはロードバランシングの下で​​セッション共有機能を実装します PHPスキル

PHPはロードバランシングの下で​​セッション共有機能を実装します PHPスキル

jacklove
jackloveオリジナル
2018-06-27 17:46:392586ブラウズ

この記事では、主に PHP の負荷分散におけるセッション共有機能を紹介し、PHP の memcache ベースのセッション共有の関連実装テクニックをサンプルの形式で分析します。この記事では、PHP が負荷分散下でセッション共有機能を実装する方法について説明します。詳細は次のとおりです。

最近、台湾スポーツ宝くじの第 4 回プログラムの開発で忙しかったため、長い間何も書いていませんでした。

まず、負荷分散について説明します。負荷分散は、ユーザーのリクエストをポリモーフィック PC に分散することで解決できることを誰もが知っていると思います。リクエストが分散されるため、セッションを考慮する必要があります。従来、PHP はセッションをローカルの一時ファイルに保存しますが、この場合、実際には、最も単純な解決策が考えられます。 memcache を使用してホストし、別のサーバーをセットアップします。これは memcache サーバーとして使用されます (メモリが大きい方がよいです)。次の作業は PHP コードに任せることができます。 php.ini はここにあります。サーバーごとに変更するのは面倒すぎるし、私はもっと怠け者なので

おそらく、

php.ini## のセッション保存場所を変更するだけでよいと言われるかもしれません。 # そして、それを memcache に書き込むことができます。ただし、このメソッドでは期限切れのセッションを削除することはできません。今日私たちが言いたいのは、セッションをホストできるようにするだけでなく、自動的に解放できるようにすることです。

これを実行したいので、完全に実行する必要があります。以下は私のコードです。コメントの読み方はわかりません:

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

興味のある記事:

php 無制限のレベル コメント ネストされた実装コード php スキル


PHP はデータベースの追加、削除、チェック、変更機能と完全なコードを実装します php の例

#PHPMAILER は PHP メール関数を実装します php の例


##

以上がPHPはロードバランシングの下で​​セッション共有機能を実装します PHPスキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。