-
- [Session]
- ; 데이터 저장/검색에 사용되는 핸들러.
- session.save_handler = files; , 파일에 저장되어 있음을 나타냅니다.
코드 복사
사용자 방법과 Memcache 두 가지 방법이 있습니다.
사용자 모드는 자신(즉, 사용자)이 정의한 세션의 핸들을 말하며 세션 액세스 등에 사용됩니다. 이는 세션 확장을 데이터베이스에 저장할 수 있습니다.
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")
- ini_set("session.save_path","127.0.0.1:11211") ;
코드 복사
다음은 PHP가 다중 서버 세션 공유를 위해 Memcache 공유를 구현하는 방법을 설명합니다.
예:
세션 처리 메커니즘을 사용자 정의합니다.
-
- /* vim: setexpandtab tabstop=4shiftwidth=4foldmethod=marker: */
- //===== ======================================
- // 프로그램: Memcache 기반 세션 클래스
- // 함수: Memcache 스토리지 기반 세션 함수 클래스
- //=============================== = ============
-
- /**
- * 파일: MemcacheSession.inc.php
- * 클래스명: MemcacheSession 클래스
- * 기능: Memcache 스토리지 기반으로 Session 기능을 독립적으로 구현
- * 설명: Session 기능을 구현하는 클래스 , 기본적으로
- * 클라이언트의 쿠키를 설정하여 세션 ID를 저장하고,
- * 그런 다음 사용자의 데이터를 서버 측에 저장하고, 마지막으로
- * 쿠키의 세션 ID를 사용하여 여부를 확인합니다. 데이터는 사용자에게 속합니다.
- * 그런 다음 해당 데이터 작업을 수행합니다.
- *
- * 이 방법은 세션 데이터의 Memcache 메모리 저장에 적합합니다.
- * 동시에 분산을 구축하는 경우 Memcache 서버
- *는 상당히 많은 캐시 데이터를 저장할 수 있으며, 사용자 수가 많고 동시성이 큰 상황에 적합합니다.
- *
- * 참고: 이 클래스에는 PHP가 있어야 합니다. Memcache 확장 프로그램이 설치되어 있거나 Memcache의 PHP API를 사용할 수 있어야 합니다.
- * Memcache 확장 프로그램을 받으려면 http://pecl.php.net을 방문하세요.
- */
-
- //SESSION 유효 시간을 초 단위로 설정
- define('SESS_LIFTTIME ' , 3600);
-
- //Memcache 구성 정보 정의
- define('MEMCACHE_HOST', 'localhost')
- define('MEMCACHE_PORT', '10000'); if (!definated('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 Esession
- */
- public function __construct()
- {
- //내 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 = new 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
- */
- 공개 함수 ($pSavePath = '', $pSessName = '')
- {
- self::$mSessSavePath = $pSavePath;
- self::$mSessName =
- return TRUE; }
- // }}}
-
- /**{{{ sessClose()
- *
- * @param NULL
- *
- * @return Bool TRUE/FALSE
- */
- 공개 함수 sessClose()
- {
- return TRUE; }}}
-
- /**{{{ sessRead($wSessId)
- *
- * @param String $wSessId
- *
- * @return Bool TRUE/FALSE
- */
- 공개 함수 sessRead($wSessId = '')
- {
- $wData = self::$ mMemcacheObj->get( $wSessId);
-
- //데이터를 먼저 읽고 그렇지 않으면 초기화합니다.
- if (!empty($wData))
- {
- return $wData }
- else
- {
- //빈 레코드 초기화
- $ret = self::$mMemcacheObj->set($wSessId, '', 0, SESS_LIFTTIME) if (TRUE ! = $ret)
- {
- die("치명적인 오류: 세션 ID $wSessId 초기화 실패!")
- return FALSE;
- }
- return TRUE; }
- // }}}
-
- /**{{{ sessWrite($wSessId, $wData)
- *
- * @param String $wSessId
- * @param String $wData
- *
- * @return Bool TRUE/FALSE
- */
- 공개 함수 sessWrite($wSessId = '', $wData = '')
- {
- $ret = self::$mMemcacheObj-> ;replace($wSessId, $wData, 0, SESS_LIFTTIME);
- if (TRUE != $ret)
- {
- die("치명적인 오류: SessionID $wSessId 데이터 저장에 실패했습니다!"); > FALSE 반환
- }
- TRUE 반환
- }
- // }}}
-
- /**{{{ sessDestroy($wSessId)
- *
- * @param String $wSessId
- *
- * @return Bool TRUE/FALSE
- */
- 공개 함수 sessDestroy($wSessId = '')
- {
- self::sessWrite($wSessId);
- return FALSE;
- }
- // }}}
-
- /**{{{ sessGc()
- *
- * @param NULL
- *
- * @return Bool TRUE/FALSE
- * /
- 공개 함수 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.use_cookies', 1);
- ini_set('session.cookie_path', '/');
-
- $domain = '.imysql.cn'
- // 세션 ID 쿠키
- ini_set('session.cookie_domain', $domain);
-
- //기본 파일 대신 session.save_handler를 user로 설정
- 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 class
- }//end 정의
-
- $memSess = new MemacheSession
- $memSess->initSess()
-
-
- 코드를 복사하세요
-
-
이 클래스를 사용하려면 프로그램의 헤더 파일에 MemacheSession.inc.php를 직접 포함하세요.
테스트 예시.
1. 세션 생성
//set_session.php session_start() if (!isset($_SESSION['admin) '])) { - $_SESSION['TEST'] = '완';
- }
- $_SESSION['admin'] 인쇄
- 인쇄 "/n"; ();
- ?>
-
-
- 코드 복사
-
-
- 2, memcached에서 쿼리하려면 sessionid를 사용하세요.
//get_session.php $mem = new Memcache $mem->connect(" 127.0.0.1", 11211);
var_dump($mem->get('0935216dbc0d721d629f89efb89affa6')); - ?>
-
-
- 코드 복사
-
-
- 참고: Memcache PECL의 향후 버전에서는 php.ini를 직접 설정하여 session.save_handler를 설정할 수 있습니다.
예:
session.save_handler = 멤캐시
session.save_path = "tcp://host:port?percious=1&weight=2&timeout=2&retry_interval=15,tcp://host2:port2"
|