PHP에서는 세션(Session)을 프로그래머가 쉽게 사용할 수 있도록 관련함수를 제공합니다. 보통 아래와 같은 방법으로 세션을 다루게 됩니다.
[세션 사용의 예]
---------- 로그인 처리 페이지 등에서... ----------
session_start();
$_SESSION["USER_NAME"] = "홍길동";
---------- 그 밖의 페이지 등에서... ----------
<? session_start(); ?>
<?=$_SESSION["USER_NAME"]?>님의 접속을 환영합니다.
위와 같이 세션을 사용하게 됩니다. 그런데 위의 소스코드가 정상적으로 실행되지 않는 경우가 발생합니다. 그 경우의 수는 여러 가지가 있을 수 있겠는데요, 여기서는 서버용량과 관계지어 간략히 설명하겠습니다.
phpinfo() 함수를 사용하여 PHP 서버의 설정을 보시면,
session
Session Support | enabled |
Registered save handlers | files user sqlite |
Registered serializer handlers | php php_binary |
Directive | Local Value | Master Value |
---|---|---|
session.auto_start | Off | Off |
session.bug_compat_42 | Off | Off |
session.bug_compat_warn | On | On |
session.cache_expire | 180 | 180 |
session.cache_limiter | nocache | nocache |
session.cookie_domain | no value | no value |
session.cookie_lifetime | 0 | 0 |
session.cookie_path | / | / |
session.cookie_secure | Off | Off |
session.entropy_file | no value | no value |
session.entropy_length | 0 | 0 |
session.gc_divisor | 1000 | 1000 |
session.gc_maxlifetime | 1440 | 1440 |
session.gc_probability | 1 | 1 |
session.hash_bits_per_character | 5 | 5 |
session.hash_function | 0 | 0 |
session.name | PHPSESSID | PHPSESSID |
session.referer_check | no value | no value |
session.save_handler | files | files |
session.save_path | no value | no value |
session.serialize_handler | php | php |
session.use_cookies | On | On |
session.use_only_cookies | Off | Off |
session.use_trans_sid | 0 | 0 |
위와 같은 화면을 보실 수 있습니다. 그런데, 위 항목에서 session.save_path 이란 항목이 있습니다. 이 항목은 PHP에서 세션을 생성할 때 서버의 세션정보를 파일에 저장하게 되는데, 그 파일의 경로가 바로 session.save_path 항목 입니다.
보통은 위와 같이 session.save_path 항목이 no value로 설정되어 있을 것입니다. no value는 특별히 session.save_path 항목을 설정하지 않은 것으로 no value는 /tmp로 적용되도록 되어있습니다.
즉 session.save_path 항목을 설정하지 않으면 세션파일이 위치할 경로가 /tmp로 설정이 되는 것입니다.
그런데, 이 디렉토리에 해당하는 파티션의 용량이 꽉 찰 경우 문제가 발생합니다. 바로 세션을 더 이상 사용할 수 없다는 것이 바로 그것입니다. 그런데, 대부분 PHP 서버설정을 에러가 출력되지 않도록 설정하기 때문에 원인을 초기에 쉽게 파악하기 힘든면이 있습니다. 이로 인해서 저도 찾는데 시간이 걸렸구요..
따라서 아래와 같은 소스코드를 로그인 처리하는 페이지와 같은 곳에 넣어주시면 에러 메시지를 확인하실 수 있습니다.
[에러메시지 출력하기] - 참고) http://blog.daum.net/bang2001/72
error_reporting(E_ALL);
ini_set("display_errors", 1);
위 소스코드를 삽입하였을 때 아래와 같은 메시지가 발생한다면 그것은 서버용량 문제입니다.
[세션 사용시 서버용량 Full로 인한 에러메시지]
Warning: Unknown: write failed: No space left on device (28) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0
메시지는 서버환경마다 약간 씩 달라질 수 있겠지만 대체로 위와 비슷할 것입니다. 위 메시지가 출력된다면 세션 디렉토리가 포함된 파티션의 용량을 확인해보시고 세션디렉토리 내 파일을 정리한다던가 하는 식으로 용량을 확보해보시기 바랍니다.
'PHP' 카테고리의 다른 글
PHP http에서 https로 리다이렉트 처리 (0) | 2013.11.22 |
---|---|
PHP POST 방식에서 뒤로가기 지원하기 (0) | 2013.10.28 |
PHP 숫자에 콤마(,) 찍기 (0) | 2013.10.16 |
PHP 해당 연,월에 대한 마지막 일자 구하기 (0) | 2013.10.04 |
PHP 에러메시지 출력 (소스코드로 에러 보이도록 설정하기) (0) | 2013.08.13 |