SESSION의 동작방식과 사용법 (feat. PHP)


오늘은 세션의 동작원리들과 주의할점! 그리고 사용법에 관해 포스팅하도록 하겠습니다.


시작하기 전에 먼저 세션에 대해 간단히 설명하자면 세션은 컴퓨터 시스템의 관리자(또는 OS 또는 서버)가 자신의 자산을 이용하는것을 허락한 사용자 (컴퓨팅)를 인식한 일정한 기간을 가리키는것으로 광범위하게 이해될 수 있습니다. 위키백과;세션


쿠키와의 차이점은 쿠키는 정보를 사용자의 컴퓨터에 저장하는 반면, 세션은 정보를 서버에 저장한다는 점에서 비교적 보안성이 더 우수합니다.

또한, 세션은 쿠키에 비해 큰 용량의 데이터를 저장할 수 있습니다.

하지만 세션의 동작방식을 알아보면 세션도 고유식별자를 확인하는데 있어, 쿠키를 이용하긴 합니다.

그러나, 쿠키를 이용하긴하지만 오로지 쿠키에만 의존적이진 않습니다.

뭐, 쿠키없이 사용할 순 있지만, 쿠키를 이용하면 더 편하게 세션을 이용할 수 있다는 뜻입니다.!


그럼 이제! 세션사용법을 간단하게 알아보도록 하겠습니다.

세션위주로만 설명하므로 자세한 소스는 생략합니다! PHP 세션 로그인 예제 보러가기






SESSION 설정 보기



세션을 사용해보기 전에 기본적인 session 설정부터 알아보겠습니다.

php.ini 파일을 보면 세션에 관한 내용들이 정의되어 있습니다.

나는 ini 파일을 수정하지 않겠다! 혹은 파일을 볼 수 없다! 의 경우 phpinfo() 함수를 이용하여 session 으로 찾아보면 설정된 내용을 볼 수 있습니다.

ini 파일 위치를 모르겠다! 싶을 때도 phpinfo() 함수를 사용해서, Loaded Configuration File 로 검색하면 위치를 찾을 수 있습니다.

아래는 phpinfo() 로 확인한 세션정보입니다.


설정정보들 중 몇가지만 알아보자면,

session.name : 세션ID를 저장할 쿠키의 이름입니다. 보통 PHPSESSID 로 사용하며, php의 세션함수 session_name()로 가져올 수 있습니다.

session.cookie_path : 세션ID를 저장할 쿠키의 경로입니다. 가끔 쿠키삭제가 안될 경우에 setcookie() 마지막 파라미터에 이 경로를 직접 지정해주면 삭제가 잘됩니다!

session.save_path : 세션이 저장되는 경로입니다. 따로 지정해 주지 않을경우, 이 경로 하위에 세션파일들이 쌓입니다.

session.use_cookies : 세션ID를 저장하는데 쿠키를 사용할지 하지 않을지를 정합니다. 1은 사용함을 나타내며 사용하지 않을경우 아래옵션을1로 설정해주어야합니다.

session.use_trans_id : 세션ID를 저장하는데 쿠키를 사용하지 않을경우, 이 옵션을 1로 변경해주어야 합니다.

session.gc_maxlifetime : 지정된 시간(초) 이 지난 세션은 폐기 대상으로 간주합니다.



위의 설정 값을 바꾸고싶은데 특정 프로젝트에서만 동적으로 변경하고자 하는 경우나, php.ini 파일에 접근 할 수 없는 경우에는 php의 ini_set() 함수를 사용하시면 됩니다

ex) ini_set("session.save_path" , "./sessions/")





SESSION 사용하기



그럼이제 사용법을 알아보도록 하겠습니다.


1. 세션 시작


세션 혹은 세션변수를 사용하기 위해서는 사용전에 반드시 session_start() 로 세션을 시작해줘야합니다.


PHP

<?php session_start(); ?>


이 함수와 함께 세션이 시작되는 순간 우리 브라우저에는 PHPSESSID 란 이름의 쿠키가 생성됩니다.

세션 설정 정보의 session.name 값을 변경하지 않으면 기본적으로 쿠키명은 PHPSESSID 입니다.

이 때 생성되는 쿠키의 값은 세션이 시작될 때 내부적으로 생성된 유일한 식별자입니다. ID라고 칭하겠습니다.

세션은 쿠키로 저장된 이 ID 값을 통해 세션을 찾습니다. 쿠키가 생성됨과 동시에 우리 서버에는 sess_ID값 이름으로 된 session 파일이 생성됩니다.

따로 지정해 주지 않을 경우 상단의 설정 정보 설명의 session.save_path 에서 지정된 경로 하위에 생성됩니다.


주의사항: session_start() 함수는 헤더데이터를 전송하기 때문에 함수를 사용하기 이전에 화면에 출력되는 어떠한 코드도 있어서는 안됩니다.


이렇게, 파일과 쿠키가 생성되면 우리는 세션을 사용할 수 있습니다.


2. 세션 저장


로그인이라고 가정하고 사용자의 이름과 아이디를 세션변수에 저장해봅시다.


PHP

<?php session_start(); $_SESSION["user_id"] = $user_id; $_SESSION["user_name"] = $user_name; ?>



이렇게 저장된 세션변수는 session_start() 되는 곳 어디서든 사용이 가능하게 됩니다! (쿠키와 서버의 파일이 둘다 삭제되지 않는 다는 가정하에)


3. 세션 삭제


마지막으로 세션을 삭제 하는 부분입니다.

사실 세션을 확실히 삭제 하고자하면, 세가지 절차가 필요합니다.


PHP

<?php $_SESSION = array(); //1. 세션변수초기화 if(isset($_COOKIE[session_name()]) ) { setcookie(session_name(), '', time() -3600, "/"); } //2. 쿠키삭제 session_destroy(); //3. 세션데이터삭제 ?>


먼저, 세션변수를 초기화 합니다.

session_destroy() 함수는 서버의 세션파일을 삭제해주지만, $_SESSION 변수까지 초기화 시켜주지는 못합니다.

예를들어 아래와같이, 세션을 $_SESSION 변수에 저장한 후, session_destroy() 한 후, 세션변수를 출력해보면, 저장된 내용이 초기화 되지 않고 그대로 나오는 것을 볼 수 있습니다.


PHP

<?php session_start(); $_SESSION["user_id"] = $user_id; $_SESSION["user_name"] = $user_name; session_destroy(); //3. 세션데이터삭제 print_r($_SESSION); ?>


물론, 다른페이지에서 session_start() 로 다시 세션을 시작해 사용할 경우, 식별자(ID) 쿠키 값이 남아있어도 서버의 파일데이터가 삭제 되었기 때문에 해당 값을 찾을 수 없습니다.

하지만 세션을 시작한 페이지와 현재 페이지가 같다면 $_SESSION 변수 안에 값이 그대로 남아있겠죠!!

그러므로 초기화 시켜주도록 합시다!


두번째로, 쿠키를 삭제합니다.

session_name() 함수로 쿠키의 ID를 가져와서 쿠키를 삭제하도록 합니다.

쿠키를 삭제 하지 않는 경우, session_start() 하는 경우 PHPSESSID로 저장된 쿠키 식별자를 읽어와 파일을 찾으려 시도합니다.

불필요한 행위는 하지않도록 해주는게 좋겠지요!


마지막으로 세션데이터를 파괴합니다.(sess_xxxx 파일 삭제)

session_destroy() 함수로 session_start() 되는 시점에 등록된 식별자 값에 대한 세션데이터를 서버에서 모두 삭제합니다.

session_destory() 로 세션을 폐기해주지 않으면, 세션정보 파일이 서버에 계속 쌓이게 됩니다.

물론 일정 시간이 지난 세션은 서버가 데이터를 폐기하기도 하지만, 이 시간을 짧게 설정할 수록 서버의 부하가 늘어납니다.

session_destroy() 함수를 사용해 명시적으로 폐기시켜주도록 합시다!




+ Recent posts

티스토리 툴바