현재 개발하는 과정 중에 사용자가 선택한 컬럼 값을 다른 페이지에서도 그대로 사용하고 싶어 해당 기능을 개발하는 업무를 진행하고 있다.
이러한 기능을 위해 세션을 사용하고 있는데 세션이 정확히 무엇인지
비슷한 개념인 쿠키랑은 어떻게 다른지 공부하고 기록을 남긴다.
HTTP 프로토콜의 약점을 보완하기 위해 사용하는데 먼저 HTTP 프로토콜의 특징이자 약점을 확인한다.
➕ 정보가 유지되지 않으면 매번 페이지 이동시 마다 로그인을 하거나 장바구니에서 상품을 선택했는데 구매페이지에서 상품의 정보가 사라지거나 하는 경우가 발생한다.
📌 즉, 클라이언트와 서버 통신시 정보를 유지하기 위한 수단으로 사용하는 것이 세션과 쿠키이다.
웹사이트 방문시 그 사이트가 사용하고 있는 서버에서 사용자의 클라이언트에 저장하는 기록 데이터 파일
클라이언트의 상태정보를 클라이언트에 저장해두었다가 필요시 해당 정보를 참조 및 재사용한다.
구분 | 쿠키 | 세션 |
---|---|---|
저장위치 | 클라이언트(로컬) | 서버 |
라이프사이클(만료시점) | 쿠키 저장시 설정(브라우저가 종료되더라도 만료시점이 지나지 않으면 자동삭제 되지 않음) | 브라우저 종료시 삭제(기간 별도 지정 가능 ) |
보안 | 로컬에 저장되어 탈취, 변조 위험 존재, 비교적 취약 | 서버에 저장되므로 쿠키보다는 안전 |
속도 | 빠름 | 제공받은 세션 아이디를 이용해서 서버에서 다시 데이터를 참조해야하므로 비교적 느림 |
필자는 PHP에서 세션을 사용해 PHP에 대한 방법을 적는다.
JAVA로 사용하게 되거나 공부를 할 경우 다시 업데이트 하도록 한다.
session_start();
➕ 세션이 이미 시작되어 있는데 해당 코드를 실행한다면 "already session ~" 식의 세션이 이미 실행되어 있다는 경고 메시지가 나온다.
그래서 isset($_SESSION)과 같은 코드를 사용하여 해당 코드를 사용했다.
$_SESSION['column'] = "노출수";
➕ 세션 변수의 이름이 키값이 되며 등록을 해지않는 한 세션이 끝날 때까지 유효하다.
echo $_SESSION['column'] ; //노출수
unset($_SEESION['column']) session_unset(); //모든 세션 변수 등록 해지 session_destory(); //세션 아이디의 삭제
컬럼의 노출 유무를 세션에 저장했어야 했어서 키-벨류 형태로 저장을 하고 싶었다. 그 방법은 직렬화를 통해 해결할 수 있었는데
$data = array("노출수" : ture, "등록수" : false, "소진금액" : true);
$_SESSION['column'] = serialize($data); //배열을 직렬화
$data = unserialize($_SESSION['column']); //사용할 때는 다시 직렬화를 풀기
➕ 직렬화를 하는 과정에서 용량이 커진다는 단점이 있다.
따라서 데이터의 양이 크다면 세션을 사용하지 않고 DB를 사용하는 것이 적절하다고 안내하고 있다.