Nuke Olaf - Log Store
쿠키와 세션이란? 본문
1. 쿠키, 세션의 사전적의미
cookie : 쿠키, 데이터의 작은 조각
session : 특정활동의 세션은 해당 활동의 작은 기간이다
2. IT 사전에서의 쿠키와 세션
(1) cookie : 웹사이트에서 전송되어 사용자의 웹 브라우저에 저장되는 데이터의 작은 조각이다.
웹 사이트가 사용자의 상태 정보(장바구니에 추가 된 항목) 또는 사용자의 브라우징 활동(특정 버튼 클릭, 로그인, 과거에 방문한 페이지 기록 등) 을 기록할 수 있는 신뢰할 수 있는 메커니즘으로 설계되었다.
또한, 사용자가 이전에 이름, 주소, 비밀번호 및 신용카드 번호와 같은 form 필드에 입력한 임의의 정보를 기억하는데 사용 될 수 있다.
(2) session : 망 환경에서 사용자 간 또는 컴퓨터 간의 대화를 위한 논리적 연결.
사용자가 특정 컴퓨터, 네트워크, 또는 소프트웨어 서비스에 로그인하거나 접근할때 시작되어 사용자가 서비스에서 로그아웃하거나 컴퓨터를 종료하면 종료되는 기간 동안의 사용자의 활동과 관련된 정보가 임시 저장되는 기간을 말한다.
즉, 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 칭한다.
3. 쿠키와 세션이 나오게 된 이유
HTTP 프로토콜은 connectionless, stateless 한 특성이 있다.
connectionlses 는 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특징
HTTP 는 클라이언트가 request 를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response 를 보내고 접속을 끊는 특성이 있다. 이것을 비연결지향이라고 한다.
stateless 는 통신이 끝나면 상태를 유지하지 않는 특징이다.
연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며, 상태정보를 유지하지 않는다.
그래서 쿠키와 세션을 사용하지 않으면, 쇼핑몰에서 옷을 구매하려고 로그인을 해도, 페이지를 이동할 때마다 계속 로그인을 해야하며, 장바구니에 담아둔 쇼핑 리스트가 저장되지 않는다.
쿠키와 세션은 HTTP 프로토콜의 이러한 특징의 단점을 보완하기 위해 사용한다.
4. 쿠키와 세션의 차이점
쿠키는 클라이언트 측에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. (하나의 쿠키값은 4KB까지 저장)
사용자 인증이 유효한 시간을 명시할 수 있다. 그래서 브라우저가 종료되면 인증상태가 해지되는 세션과 달리 브라우저가 종료되어도 유효시간이 지나지 않았으면 인증이 유지된다.
세션은 쿠키를 기반으로 하고 있지만, 사용자 정보를 클라이언트 측에 저장하는 쿠키와 달리, 세션은 이를 서버 측에서 관리한다. 서버에서는 클라이언트를 구분하기 위해 세션에 ID 를 부여하여, 웹 브라우저가 서버에 접속해서 브라우저를 종료할때까지 인증상태를 유지한다. 사용자 정보를 서버에 두기 때문에 쿠키보다 보안에 좋다는 장점이 있지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 되어 동접자 수가 많아질수록 성능이 저하되는 요인이 된다.
즉, 쿠키와 세션의 가장 큰 차이점은 사용자의 정보가 저장되는 위치이다.
5. 쿠키와 세션을 사용하는 방법 (PHP)
(1) cookie
쿠키를 발행하기 위해 setcookie() 함수를 사용한다
setcookie()
아래는 로그인 페이지에서 받아온 아이디, 패스워드를 쿠키에 저장하고, 쿠키의 token 을 비밀번호의 해쉬값으로 초기화하는 코드이다.
// 쿠키 발행 예시
// 순서대로 이름, 값, 유효시간
setcookie("'id", $_REQUEST[['id'], time()+3600, "/")
setcookie("login_time", time(), time()+3600, "/")
setcookie("token", md5($_REQUEST['pw']), time()+3600, "/")
아래는 쿠키를 파괴하는 코드이다. 로그아웃과 같은 상황에 이용한다.
setcookie("id", ", time()-3600, "/"); // 쿠키의 아이디에 " 초기화
setcookie("login_-time", ", time()-3600, "/"); // 만료시간을 과거로 함(사용X)
setcookie("token", ", time()-3600, "/"); // 적용범위 : root
(2) session
세션을 생성하기 위해 session_start() 함수를 사용한다
session_start()
참고 사이트>>>
https://itsaessak.tistory.com/181
https://www.php.net/manual/en/features.cookies.php
https://merona99.tistory.com/99
https://dreamaz.tistory.com/25
https://interconnection.tistory.com/74
'Language > [PHP]' 카테고리의 다른 글
AWS - EC2 인스턴스위에 LAMP 설치 (0) | 2020.02.24 |
---|---|
AWS - EC2 인스턴스 생성하기 (0) | 2020.02.24 |
JavaScript - 체크박스 하나만 선택할 수 있게 하기 (0) | 2020.02.12 |
Ajax 로 PHP 에 파일 전송하기 (0) | 2020.02.12 |
MySQL 에 BLOB으로 이미지 저장하기 (0) | 2020.02.11 |