일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 서버
- 크세노크라테스
- 플로티노스
- 피론
- 아베로에스
- 윈도우10
- 아리스티포스
- mysl
- 아낙시만드로스
- ExpanDrive
- 아이스키네스
- httpd
- CentOS
- A2000UA
- bridged
- 프톨레 마이오스
- Server
- 소도마
- 알키비아데스
- RaiDrive
- 히파티아
- php
- 고르기아스
- 디아고라스
- NetDrive
- 다날
- VMware
- 아낙사고라스
- PG
- short_open_tag
- Today
- Total
개발자의 하루
memcached 윈도우 설치 및 세션공유 본문
일반적으로 php에서 세션은 파일로 많이 사용하십니다.
하지만 웹 서버가 2대 이상일경우 로그인이 풀리는 문제가 발생될 수 있습니다.
A서버에서 로그인을 해서 세션을 얻었는데 B서버로 페이지 이동을 하면 바로 세션이 풀리면서 로그아웃이 되는 것이죠.
(물론 A서버 B서버 동일한 도메인 또는 서브도메인이어야 세션이 공유 가능합니다.)
이런 경우 일명 세션 공유라고 세션폴더를 공유 형태로 유지하거나
rsync 등을 사용해서 세션 동기화를 하거나
DB를 이용하는 등 다양한 방법으로 세션을 유지하여 로그인 상태를 유지합니다.
물론 보안에 매우 취약한 쿠키를 이용하면 로그인은 유지 되겠지만 설마 쿠키로 로그인을 하진 않으시겠죠!
그외 일명 세션서버를 두어 세션을 관리하는 방법도 있습니다.
세션 서버는 memcached나 Redis 등을 많이 사용됩니다.
리눅스에서는 YUM을 통해 쉽게 memcached 설치가 가능하지만 윈도우에서는 어렵진 않지만 꽤 귀찮게 설치를 해야 됩니다.
memcached 설치
먼저 memcached 데몬을 다운 받습니다.
소스 형태로는 많이 존재하는데 윈도우용 데몬파일은 잘 보이질 않아 첨부합니다.
구글링해서 받으시거나 첨부된 파일로 받으시면 됩니다.
memcached 버전에 따라 설치 방식이 조금 다릅니다.
memcached 1.4.5이상
c:\> schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"
서비스로 등록되지 않고 작업 스케줄러로 등록하셔야 됩니다.
c:\> schtasks /delete /tn memcached
작업스케줄러에서 직접 지우거나 cmd창에서 지울수 있습니다.
memcached 1.4.5 미만
c:\> c:\memcached\memcached.exe -d install
c:\> c:\memcached\memcached.exe" -d runservice -m 512
서비스로 등록하고 환경설정을 해주시면 됩니다.
레지스트리에서도 변경 가능합니다. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached
c:\> c:\memcached\memcached.exe -d start
cmd 창에서 서비스를 시작하거나 제어판-관리도구-서비스에서 시작 중지 등이 가능합니다.
c:\> c:\memcached\memcached.exe -d uninstall
서비스 제거
memcached가 정삭 동작하면
C:\>netstat -an
프로토콜 로컬 주소 외부 주소 상태
...
TCP 0.0.0.0:11211 0.0.0.0:0 LISTENING
...
TCP [::]:11211 [::]:0 LISTENING
...
UDP 0.0.0.0:11211 *:*
..
UDP [::]:11211 *:*
memcached 기본포트인 11211 포트가 정상적으로 열린것을 확인 가능합니다.
memcache 연동
memcache 연동은 자신의 윈도우 환경에 맞은 php_memcache.dll 파일을 구하면 됩니다.
https://pecl.php.net/package/memcache
PECL(PHP Extension Community Library)에서 memcache 윈도우용 DLL를 찾습니다.
자신의 서버 환경에 맞는 파일을 다운 받습니다.
해당되는 버전이 없다면 이 글의 하단부분을 참고하세요.
다운로드 한 파일을 압축을 풀어 php_memcache.dll 파일을 PHP extension 폴더에 복사합니다.
php환경파일인 php.ini를 열어 맨 하단에 아래 줄을 추가하고
[MemCache]
extension=php_memcache.dll
세션을 memcach로 사용하기 위해 기존 세션 설정을 변경합니다.
;session.save_handler = files
;session.save_path = "c:/temp/"
session.save_handler = memcache
session.save_path = "tcp://localhost:11211?persistent=1"
기존 session.save_handler와 session.save_path는 주석처리 해주시고 새롭운 설정을 위와 같이 추가합니다.
설정이 모두 끝나면 웹서버를 재시작하고
<?php
phpinfo();
?>
phpinfo로 확인합니다.
memcache가 정상적으로 로드 되었습니다.
세션 부분이 memcache로 변경되었습니다.
웹서버가 A(1.1.1.1), B(1.1.1.2), C(1.1.1.3) 3대 있고 A(1.1.1.1)에 memcached 데몬이 있다면
각각의 세션 저장 부분을 모두 A로 지정하면 3대의 서버에서 쉽게 세션 공유됩니다.
A 서버
session.save_handler = memcache
session.save_path = "tcp://1.1.1.1:11211?persistent=1"
B 서버
session.save_handler = memcache
session.save_path = "tcp://1.1.1.1:11211?persistent=1"
session.save_handler = memcache
session.save_path = "tcp://1.1.1.1:11211?persistent=1"
PHP v.7.x.x는 아래 URL을 참조하세요
https://github.com/nono303/PHP7-memcache-dll
[ 추가 2017.06.09 ] PECL 사이트의 php 5.3 버전은 오늘자로 5.3.27 이고 5.3.5에서는 작동되지 않습니다. 결국 php 버전은 5.3.27로 올리고 설정완료.
'Client' 카테고리의 다른 글
Deprecated: Function eregi() is deprecated in (0) | 2017.06.16 |
---|---|
윈도우10에선 EFM ipTIME A2000UA 쓰레기 (9) | 2017.06.13 |
Deprecated: mysql_connect() (0) | 2017.06.08 |
a session is active. You cannot change the session module's ini settings at this time in (0) | 2017.06.08 |
윈도우10에서 체험지수 확인하기 (0) | 2017.06.08 |