-
- ; データの保存/取得に使用されるハンドラー。
- session.save_handler = files; これはセッション メソッドであり、デフォルトのファイルで十分です。つまり、ファイル ストレージを意味します。
-
コードをコピーします
他にも user と memcache の 2 つの方法があります。
ユーザーモードとは、セッションへのアクセスなどに使用される、自分(つまりユーザー)が定義したセッションのハンドルを指します。これにより、セッションの拡張子をデータベースに保存できます。
memcache モードでは、memcache と session.save_path を設定する必要があります。
PHP の session.save_handler に memcache を使用します。
ini_set("session.save_handler", "memcache"); - ini_set("session.save_path", "tcp://127.0.0.1:11211,tcp://192.168.1.12:11211") ;
-
-
コードをコピー
PHP の session.save_handler に memcached を使用します。
ini_set("session.save_handler","memcached");
-
- コードをコピーします
-
以下では、PHP がマルチサーバーセッション共有のための memcache 共有を実装する方法を紹介します。
例:
セッション処理メカニズムをカスタマイズします。
-
- /* vim: set Expandtab tabstop=4Shiftwidth=4foldmethod=marker: */
- //================== = ========================
- // プログラム: Memcache ベースのセッション クラス
- // 関数: Memcache ストレージに基づくセッション関数クラス
- // = ==========================================
-
- /**
- * ファイル: MemcacheSession.inc.php
- * クラス名: MemcacheSession クラス
- * 機能: Memcache ストレージに基づいてセッション関数を独自に実装します
- * 説明: このクラスは基本的に
- を通じてセッション関数を実装します * クライアントの Cookie を設定しますSessionID を保存するには、
- * 次にユーザーのデータをサーバー側に保存し、最後に
- * Cookie 内のセッション ID を通じてデータがユーザーに属するかどうかを判断し、
- * その後、対応するデータ操作を実行します
- *
- * これMemcache に適した方法 セッションデータをメモリに保存する方法
- * 同時に分散 Memcache サーバーを構築すると、
- * 大量のキャッシュデータを保存できるため、大量のキャッシュデータが存在する状況に適しています
- *
- * 注: このクラスには PHP が必要です。 Memcache 拡張機能がインストールされているか、Memcache の PHP API が必要です
- * Memcache 拡張機能を入手するには、http://pecl.php.net にアクセスしてください。 */
-
- //SESSION 有効時間を秒単位で設定します
- define('SESS_LIFTTIME', 3600);
-
- //memcache 構成情報を定義します
- define('MEMCACHE_HOST', 'localhost'); , '10000');
-
- if (!dependent('MemcacheSession'))
- {
- define('MemcacheSession', TRUE);
- class MemacheSession
- {
- // {{{ クラスメンバー属性の定義
- static $mSessSavePath ;
- static $mSessName;
- static $mMemcacheObj;
- // }}}
-
- // {{{ 初期化コンストラクター
- /**
- * コンストラクター
- *
- * @param string $login_user ログインユーザー
- * @param int $login_type ユーザータイプ
- * @param string $login_sess ログインセッション値
- * @return エセッション
- */
- public function __construct()
- {
- //My memcache コンパイルされるphp モジュールとして直接呼び出すことができます
- //そうでない場合は、Memcache-client.php ファイルを自分でインクルードしてください
- if (!class_exists('Memcache') || !function_exists('memcache_connect'))
- {
- die( '致命的なエラー: Memcache 拡張機能を読み込めません!');
- }
-
- if (!empty(self::$mMemcacheObj) && is_object(self::$mMemcacheObj))
- {
- return false }
-
- self: :$mMemcacheObj = 新しい Memcache;
-
- if (!self::$mMemcacheObj->connect(MEMCACHE_HOST , MEMCACHE_PORT))
- {
- die('致命的なエラー: memcache ホストに接続できません '.MEMCACHE_HOST . ':'. MEMCACHE_PORT);
- }
-
- return TRUE; }
- // }}}
-
- /**{{{ sessOpen($pSavePath, $name)
- *
- * @param String $pSavePath
- * @param String $pSessName
- *
- * @return Bool TRUE/FALSE
- */
- public function sessOpen($pSavePath = '', $pSessName = '')
- {
- self: :$mSessSavePath = $pSavePath;
- self::$mSessName = $pSessName;
- return TRUE; }
- // }}}
-
- /**{{{ sessClose()
- *
- * @param NULL
- *
- * @return Bool TRUE/FALSE
- */
- public function sessClose()
- return TRUE ;
- }
- // }}}
-
- /**{{{ sessRead($wSessId)
- *
- * @param String $wSessId
- *
- * @return Bool TRUE/FALSE
- */
- public function sessRead($wSessId = '')
- {
- $wData = self::$mMemcacheObj->get( $wSessId);
-
- //最初にデータを読み取り、そうでない場合は 1 つを初期化します
- if (!empty($wData))
- {
- return $wData; }
- else
- {
- // 空のレコードを初期化します
- $ ret = self: :$mMemcacheObj->set($wSessId, '', 0, SESS_LIFTTIME);
- if (TRUE != $ret)
- {
- die("致命的なエラー: セッション ID $wSessId の初期化に失敗しました!") ;
- return FALSE ;
- }
- TRUE を返す
- }
- // }}}
-
- /**{{{ sessWrite($wSessId, $wData)
- *
- * @param String $wSessId
- * @param String $wData
- *
- * @return Bool TRUE/FALSE
- */
- public function sessWrite($wSessId = '', $wData = '')
- {
- $ret = self::$mMemcacheObj->replace($wSessId, $wData, 0 , SESS_LIFTTIME);
- if (TRUE != $ret)
- {
- die("致命的なエラー: セッション ID $wSessId データの保存に失敗しました!");
- return FALSE }
- // }}}
-
- /**{{{ sessDestroy($wSessId)
- *
- * @param String $wSessId
- *
- * @return Bool TRUE/FALSE
- */
- public function sessDestroy($wSessId = '')
- {
- self::sessWrite($wSessId)
- return
- }
- // }}}
-
- /** {{{ sessGc()
- *
- * @param NULL
- *
- * @return Bool TRUE/FALSE
- */
- public function sessGc()
- {
- //追加のリサイクルは必要ありません。memcache には独自の期限切れリサイクル メカニズムがあります
- return TRUE; }
- // }}}
-
- /**{{{ initSess()
- *
- * @param NULL
- *
- * @return Bool TRUE/FALSE
- */
- public function initSess()
- {
- //GET/POST 変数メソッドを使用しない
- ini_set('session.use_trans_sid', 0);
-
- //ガベージ コレクションの最大有効期間を設定する
- ini_set('session.gc_maxlifetime' , SESS_LIFTTIME) ;
-
- //COOKIE を使用してセッション ID を保存する方法
- ini_set('session.cookie_path', '/'); .cn';
- //複数のホストがセッション ID を保存する COOKIE を共有します
- ini_set('session.cookie_domain', $domain);
-
- //デフォルト ファイルの代わりに session.save_handler を設定します
- session_module_name('user ');
-
- //さまざまな SESSION 操作に対応するメソッド名を定義します。
- session_set_save_handler(
- array('MemacheSession', 'sessOpen'), // 静的メソッド My_Sess::open() に対応します。以下同様。
- array('MemacheSession', 'sessClose'),
- array('MemacheSession', 'sessRead'),
- array('MemacheSession', 'sessWrite'),
- array('MemacheSession', 'sessDestroy'),
- array ('MemacheSession', 'sessGc')
- );
-
- session_start();
- return TRUE; }
- // }}}
- }//end
-
- $memSess = new MemacheSession;
- $memSess->initSess();
- ?>
-
-
- このクラスを使用するには、プログラムのヘッダー ファイルに直接 MemacheSession.inc.php を含めます。
-
- テスト例。
1. セッションを作成する
-
-
-
-
//set_session.php session_start(); if (!isset($_SESSION['admin'])) { $_SESSION['TEST'] = 'wan'; } print $_SESSION['admin']; print "/n"; ?>
- コードをコピー
-
-
- 2、memcached でクエリを実行します。
-
-
-
-
- //get_session.php
- $mem = 新しい Memcache;
$mem->connect("127.0.0.1", 11211); var_dump($mem->get() '0935216dbc0d721d629f89efb89affa6')); ?>
コードをコピー
注: memcache PECL 将来のバージョンでは、php.ini を直接設定して session.save_handler を設定できるようになります。
- 例:
-
session.save_handler = memcache
session.save_path = "tcp://host:port?persistent=1&weight=2&timeout=2&retry_interval=15,tcp://host2:port2"
-
-
-
-
-
|