[완료] PHP 세션 끊김 현상
안녕하세요.
PHP 세션에 대해 질문드립니다.
환경은 리눅스에 PHP v4.4.4 입니다.
먼저, 기존에는 웹서버 1대, DB서버 1대로 서비스 하다가 시스템을 확장하여
-. 웹서버 2대, DB서버 1대, 데이터서버 1대 이렇게 운영하게 되었습니다.
웹서버는 2대는 DNS Round Robin을 걸고, 데이터서버의 디스크를 NFS 마운트 해서 사용합니다.
이렇게 서비스 중이었는데, 사용자들이 가끔 사이트를 이동하다가 로그아웃 되는 현상이 나타난다고 합니다. 현재 생각되어 지는 것은 세션 문제인것 같습니다.
기존에는 각 웹서버의 로컬 디스크의 /tmp로 세션 디렉토리로 사용하고 있었고, DNS Round Robin으로 한 후에도 시스템 환경은 위처럼 바뀌었는데 세션은 예전방식으로 하고 있습니다.
그래서, 각 웹서버의 php.ini 파일의 session.save_path=/home/session 으로 하고 디렉토리 퍼미션도 777로 주고, 아파치를 재시작 하고 접속해 보니 사이트가 올라오지 않았습니다. 부랴부랴 원래 대로 해놓고 구글링 해보니 어떤분께서 세션을 분산서버에 NFS로 한다는게 문제가 있을듯 하다고 합니다.
현재 php.ini의 세션관련 값들은 다음과 같습니다.
session.auto_start = Off
session.cookie_domain = no value
session.save_handler = files
session.save_path = /tmp
session.use_cookies = On
session.use_trans_sid = Off
1. 위와 같은 환경에서 세션을 계속 유지하고 공유 할 수 있는 방법이 무엇인지요?
2. 각 html 페이지에 session_start()를 사용한 파일을 일일이 수정해야 하는지요?
3. 로그인후 session_register('변수', '변수', ...) 이렇게 했는데, 여기 앞 뒤로 뭔가 해주면 안되는지요?
4. 위 방법들이 안될경우 세션을 DB로 관리해야 하는지요?
감사합니다.
세션 저장 자체를
세션 저장 자체를 직접 작성해서 저장소를 통일하세요.
http://kr.php.net/manual/en/function.session-set-save-handler.php
보통은 db 에 넣습니다.
http://kr.php.net/manual/en/function.session-start.php
session_register() 는 백만년전의 사용방법입니다.
훨씬 간단하게 $_SESSION 변수를 이용하기만 하면 됩니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
송효진님처럼 세션
송효진님처럼 세션 저장소를 하나로 통일하세요(DB)
또는 라운드로빈이 아닌 로드밸런싱을 이용하는 것도 하나의 방법입니다. (물론 추가 비용이 들겠죠 ㄷㄷ)
로드밸런싱 알고리즘은 Source Hashing 을 사용하시면 됩니다.
댓글 달기