Memcache_PHP チュートリアルでのセッション データのマルチサーバー共有の詳細な説明
関連する紹介
1. memcache + memcache のマルチサーバー データ共有の概要については、http://www.guigui8.com/index.php/archives/206.html
2.session を参照してください。メカニズム:
セッション メカニズムはサーバー側のメカニズムであり、サーバーは情報を保存するためにハッシュ テーブルに似た構造を使用します (またはハッシュ テーブルを使用する場合もあります)。 プログラムがクライアントのリクエストに対してセッションを作成する必要がある場合、サーバーはまずクライアントのリクエストに sessionid と呼ばれるセッション識別子が既に含まれているかどうかを確認します。セッション ID が既に含まれている場合は、そのリクエストが以前にこのクライアント用に作成されたことを意味します。セッションを渡した後、サーバーはセッション ID に従ってセッションを取得し、それを使用します (取得できない場合は、新しいセッションを作成する可能性があります)。クライアントのリクエストにセッション ID が含まれていない場合は、クライアント用にセッションが作成されます。セッションはセッション ID に関連付けられて生成されます。セッション ID の値は、繰り返されず、模倣するパターンが簡単に見つからない文字列である必要があります。このセッション ID は、この応答で保存するためにクライアントに返されます。
Cookie を使用してこのセッション ID を保存すると、対話プロセス中にブラウザーがルールに従ってこの ID をサーバーに自動的に表示できるようになります。
通常、この Cookie の名前は SEEESIONID に似ています。たとえば、WebLogic によって生成された Cookie PHPSESSID=ByOK3vjFD75aPnrF3K2HmdnV6QZcEbzWoWiBYEnLerj の場合、その名前は PHPSESSID です。
2 番目の動機
実際の Web 制作環境では、アプリケーション システムがさまざまなビジネス アプリケーションをさまざまなサーバーに分散して処理することがよくあります。 現在のオンライン ユーザー情報を追跡する場合、それが同じプライマリ ドメイン名であれば、グローバル Cookie を使用して関連データの共有を処理できます。それが異なるプライマリ ドメインにある場合は、中心的な概念を通じて対応する問題を解決できます。オブザーバー モード この概念によって拡張されたソリューションは数多くありますが、今日説明するのは前者で、memcache のマルチサーバー データ共有テクノロジを使用してセッションをシミュレートし、現在のオンライン ユーザー データを複数のサーバーで共有します。
複数サーバーのセッション情報の統合については、以下の要件があります:
1. memcached で指定された複数のサーバーにセッション情報を保存できること (先ほど紹介した memcache のマルチサーバー データ共有を通じて)。 2. zend に似せることができるようにする session_start() を定義する前に、session_id($sessid) を通じて session_id の値をカスタマイズします。 3. システムの実行中に、memcached に保存されたセッション情報とファイルに保存されたセッション情報を簡単に切り替えることができます。
3つのコード
実装方法は非常に簡単で、memcacheを使用してセッションメカニズムをシミュレートし、複数間でセッション情報を共有するという目的を達成するために記憶媒体を共有サーバーのメモリに置き換えるだけです。分散展開サーバー。呼び出しインターフェースはzendが提供するセッション操作機能とは異なるため、memcacheとファイルのセッション情報操作を簡単に切り替えることができます。 次のコードは何度もテストされており、上記の機能要件を満たすことができます。まずは以下に投稿します:
/**
*=---------------------------------------------- --- ----------------------------=
* ---------------------------------- ------------------------=
*
* Memcache ストレージに基づいてセッション機能を実装します
* (セッションメカニズムをシミュレートします。memcache を使用してストレージメディアを共有サーバーのメモリに置き換えるだけです)
*
* 欠点: 現在、セッションを導入するための実装戦略がありません。異なるプライマリドメインの共有メカニズム。つまり、同じメイン ドメイン内の実装のみがサポートされます。
*
* Copyright(c) 2008 by guigui.All Rights Reserved.
* @author guigui
* @version $Id: MemcacheSession.class.php、v 1.0 2008/12/22 $
* @パッケージシステム
* @link http://www.guigui8.com
*/
/**
* class MemcacheSession
*
* 1. セッションIDを保存するようにクライアントのCookieを設定します
* 2. ユーザーのデータをサーバー側に保存し、Cookie内のセッションIDを通じてデータがユーザーに属するかどうかを判断します
*/
class MemcacheSession
{
// {{{ クラスメンバー属性定義
public $memObject = null //memcache 操作オブジェクトハンドル
private $_sessId = '';
private $_sessKeyPrefix = 'sess_';
private $_sessExpireTime = 86400;
private $_cookieDomain = '.guigui8.com' //グローバル Cookie ドメイン名
= '_PROJECT_MEMCACHE_SESS';
private $ _cookieExpireTime = '';
private $_memServers = array('192.168.0.3' => 11211, '192.168.0.4' => 11211);
private $_sessContainer = array(); //現在のユーザーのセッション情報
private static $_instance = null; //このクラスのシングルトンオブジェクト
// }}}
/**
* シングルトンオブジェクトを取得する静的メソッド。
* (ちなみに、memcache 情報ストレージのサーバー パラメーターを指定できます)
*
* @param string $host - memcache データ ストレージのサーバー IP
* @param integer $port - memcache データ ストレージのサーバー ポート番号
* @param bool $ isInit - オブジェクトのインスタンス化時にセッションを開始するかどうか
*/
public static function getInstance($host='', $port=11211, $isInit = true) {
if (null ===) self::$_instance) {
'', $port=11211, $isInit = false){
!empty($host) && $this->_memServers = array(trim($host) => $port );
$isInit && $this- >start();
}
/**
* コンストラクター
* *
* @param bool $isInit - オブジェクトのインスタンス化時にセッションを開始するかどうか
*/
/**
*=-------------------------------------------- ------------------------=
*=---------------------- --------------------------------------------------=
* パブリックメソッド
*=------------------------------------------ ------------------------=
*=-------------- -------------------------------------------------- ---=
*/
public function start($expireTime = 0){
$ _sessId = $_COOKIE[$this-> ;_cookieName];
if (!$_sessId){
$this->_sessId = $this->_getId();
$this->_cookieExpireTime = ($expireTime > ; 0) ? time() + $expireTime : 0;
setcookie($this->_cookieName, $this->_sessId, $this->_cookieExpireTime, "/", $this->_cookieDomain);
$this->_initMemcacheObj();
$this-> $this->_sessContainer = $this-> ;_getSession($_sessId);
essId){
return false }
/**
* セッション操作を開始します
**/
public function isRegistered($varName){
if (!isset($this->_sessContainer[$varName])){
return false;
return true;
}
/**
* * セッション変数を登録します
* *
* @param string $varName - セッションとして登録する必要がある変数名
* @parammixed $varValue - 登録する必要があるセッション変数の値
* @ return bool - 変数名はすでに存在します。 false を返します。登録は成功し、true を返します
*/
public function set($varName, $varValue){
$this->_sessContainer[$varName] = $varValue;
$this->_saveSession();
return true ;
}
/**
* 登録されたセッション変数の値を取得します
**/
public function get($varName){
if (!isset($this->_sessContainer[$varName])){
return false;
}
return $ this->_sessContainer[$varName];
}
/**
* 登録されたセッション変数を破棄します
*
* @param string $varName - 破棄する必要があるセッション変数の名前
* @return bool 破棄が成功した場合は true を返します
*/
public function delete($varName){
unset($this->_sessContainer[$varName]);
$this- >_saveSession();
return true;
}
/**
* 登録されているすべてのセッション変数を破棄します
*
* 破棄が成功した場合は @return true
*/
public function destroy(){
$this->_sessContainer = array();
$this->_saveSession() ;
true を返します。
}
/**
* すべてのセッション変数を取得します
*
* @return array - 登録されているすべてのセッション変数値を返します
*/
public function getAll(){
return $this->_sessContainer;
}
/**
* 現在のセッション ID を取得します
*
* @return string セッション ID を取得します
*/
public function getSid(){
return $this->_sessId;
}
/**
* Memcache サーバー情報の取得
*
* @return array Memcache 構成配列情報
*/
public function getMemServers(){
return $this->_memServers;
}
/**
* Memcache サーバー情報を設定します
*
* @param string $host - Memcache サーバーの IP
* @param int $port - Memcache サーバーのポート
*/
public function setMemServers($arr){
$this->_memServers = $arr;
}
/**
* Memcache サーバーを追加します
*
* @param string $host - Memcache サーバーの IP
* @param int $port - Memcache サーバーのポート
*/
public function addMemServer($host, $port){
$this->_memServers[trim ($host)] = trim($port);
$this->memObject->addServer($host, $port);
}
/**
* Memcache サーバーを削除します (これは構成を削除するだけであり、実際に Memcached 接続プールから削除することはできないことに注意してください)
*
* @param string $host - Memcache サーバーの IP
* @param int $port - Memcache サーバーのポート
*/
public function RemoveMemServer($host) ){
unset($this->_memServers[trim($host)]);
}
/**
*=-------------------------------------------- ------------------------=
*=---------------------- --------------------------------------------------=
* プライベートメソッド
*=------------------------------------------ ------------------------=
*=-------------- -------------------------------------------------- ---=
*/
/**
* セッション ID を生成します
*
* @return string 32 ビットのセッション ID を返します
*/
private function _getId(){
return md5(uniqid(microtime()));
}
/**
* Memcache に保存されているセッションキーを取得します
*
* @param string $_sessId - セッション ID を指定するかどうか
* @return string 取得したセッションキー
* /
プライベート関数 _getSessKey($_sessId = ''){
$sessKey = ($_sessId == '') ? $this->_sessKeyPrefix.$this->_sessId : $this->_sessKeyPrefix.$_sessId;
return $sessKey;
}
/**
* セッションデータを保存するパスが存在するか確認します
*
* @return bool 成功した場合は true を返します
*/
プライベート関数 _initMemcacheObj(){
もし( !class_exists('Memcache') || !function_exists('memcache_connect')){
$this->showMessage('失敗: Memcache 拡張機能がインストールされません。http://pecl.php.net からダウンロードしてインストールしてください') ;
}
if ($this->memObject && is_object($this->memObject)){
return true;
}
$this->memObject = 新しい Memcache;
if (!empty($this- >_memServers)) {
foreach ($this->_memServers as $_host => $_port) {
$this->memObject->addServer($_host, $_port);
}
}
return true;
}
/**
* セッションファイル内のデータを取得します
**/
private function _getSession($_sessId = ''){
$this->_initMemcacheObj();
$sessKey = $this->_getSessKey($_sessId );
$sessData = $this->memObject->get($sessKey);
if (!is_array($sessData) || empty($sessData)){
//これは $_COOKIE['__SessHandler である必要があります'] エラー!
return array();
}
return $sessData;
}
/**
* 現在のセッション データを Memcache に保存します
*
* @param string $_sessId - セッション ID
* @return 成功した場合は true を返します
*/
private function _saveSession($_sessId = ''){
$this->_in itMemcacheObj() ;
$sessKey = $this->gt;_getSessKey($_sessId);
if (empty($this->gt;_sessContainer)){
$ret = @$this->memObject->set($sessKey, $this->_sessContainer, false, $this->_sessExpireTime);
}else{
$ret = @$this->memObject->replace($sessKey, $this->_sessContainer, false, $ this->_sessExpireTime);
}If (! $ RET) {
$ this- & gt; _Showmessage ('失敗: セッション データの保存に失敗しました。memcache サーバーを確認してください') *
* プロンプトメッセージを表示します
*
* @param string $strMessage – 表示されるメッセージの内容
* @param bool $isFailed – 失敗メッセージかどうか、デフォルトは true です
*/
private function _showMessage($strMessage, $isFailed = true); {
return;
if ($isFailed){
echo ($strMessage);
}
echo $strMessage;
}
4 つのアプリ
例:
コードをコピーします コードは次のとおりです:
コードは次のとおりです。 mem->addMemServer('192.1 68 .0.4',11211);
$mem->addMemServer('192.168.0.5',11211);
if(1 ) {$sn= '838ece1033bf7c7468e873e79ba2a3ec';
$mem->setSessId($sn);}
コードをコピーします
コードは次のとおりです:
$addr= $mem->get('addr');
$_MEM_SESSION= $mem->getAll();
echo"
localhost ファイル セッション:";
echo"
memcache セッション:";var_dump($_MEM_SESSION);
/ /$res= $mem->delete('name');
www.bkjia.com
true
http://www.bkjia.com/PHPjc/327560.html
技術記事
関連する概要 1. memcache + memcache のマルチサーバー データ共有の概要については、http://www.guigui8.com/index.php/archives/206.html を参照してください。 2. セッション メカニズム: セッション メカニズムはサービス..

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
