Knowledge Map

세션이란? 본문

WEB/PHP

세션이란?

2016. 6. 13. 20:55

출처 : 성공적인 웹 프로그래밍 PHP와 MYSQL ( 책 )


세션관리

http라는 프로토콜은 상태를 유지하는 기능이 없다. 

세션이란 특정 사이트에 사용자가 머무르는 기간 또는 한명의 사용자의 한번의 방문을 의미한다.

세션관리를 통해서 로그인, 선호도에 따른 내용 출력, 장바구니 기능 또한 구현할수 있다.


php는 php4 이후 슈퍼 글로벌 변수인 $_SESSION이 도입되면서 세션 관리에 대한 접근방식이 달라졌다.



세션관리 기초

php에서 세션에는 고유한 세션 ID가 부여되며 이것은 무작위 숫자이다. 세션 ID는 웹서버에 의해 생성되며 세션 기간 동안 사용자 쪽에 저장된다.

세션ID는 세션 변수라고 불리는 특별한 변수를 등록하는데 키처럼 쓰인다.

세션 ID는 클라이언트 쪽에서 알수 있는 유일한 정보이며 웹서버에서는 클라이언트로부터 세션ID를 받아서 세션 변수에 저장된 내용을 다룰수 있다.

기본적으로 세션변수는 서버에서 파일의 형태로 저장된다.


URL에 세션 ID를 포함할수도 있는데 URL에 무작위로 보이는 숫자가 들어가있다면 세션 관리의 일종일 가능성이 있다.



쿠키란?

쿠키란 사용자의 하드 디스트에 저장되는 작은 크기의 데이터를 말한다.

Set-Cookie: NAME=VALUE; [expires=DATE;][path=PATH;][domain=DOMAIN_NAME;][secure]

이것은 NAME이라고 불리고 VALUE 라는 값이 들어있는 쿠키를 만들어낸다. 이외의 다른 항목들은 옵션이다.

expires라는 항목은 쿠키가 유효한 만료 기한을 나타낸다. 이 쿠키는 DATE라는 시간이 지나면 무효하게 된다. 이것은 expires라는 항목이 없다면 쿠키는 언제나 유효하다는 의미도 된다.

path와 domain에는 이 쿠키가 유효한 사이트의 주소나 디렉터리 범위등을 명시해줄 수 있다.

secure라는 키워드는 이 쿠키는 보안이 안되는 일반적인 HTTP로는 전송될수 없다는 것을 나타낸다.

브라우저가 URL에 접속하게 되면 먼저 그 URL에 대한 쿠키가 저장되어 있는지 살피고 있으면 쿠키가 저장하고 잇는 정보를 서버에게 전송한다.



PHP에서 쿠키 설정하기

쿠키는 setcookie() 함수로 설정할 수 있다.

bool setcookie ( string name[, string value [, int expire [, string domain [, int secure ] ] ] ] ] )

setcookie( 'mycookie', 'value' );

이렇게 쿠키를 생성할 경우 $_COOKIE['mycookie']를 통해 접근할 수 있다.

쿠키는 만료 기한이 지나거나 setcookie()를 앞에서와 같은 쿠키 이름으로 호출하면 지워진다. 또한 쿠키는 header()함수를 통해서도 설정할 수 있다.

PHP에서는 쿠키헤더가 다른 어떤 헤더들보다 먼저 보내져야 하므로 주의해야 한다.



세션과 쿠키 사용하기

쿠키는 몇몇 브라우저에서는 허용하지 않고, 어떤 사용자들은 브라우저에 쿠키를 허용하지 않도록 설정해 놓기 때문에 PHP 세션은 쿠키를 사용하는 방법과 URL을 사용하는 방법을 둘다 사용하게 된다.

PHP세션은 쿠키에 대해서 세션함수를 통해서 알아서 해준다.

session_get_cookie_params()는 세션관리에 사용되는 쿠키의 내용들을 보는데 사용할 수 있다.

session_get_cookie_params($lifetiem, $path, #domain [, $secure ] );



세션 ID 저장하기

PHP는 세션 ID의 전달을 위해 쿠키를 사용하거나 URL에 덧붙여서 사용할 수도 있다.

세션ID를 URL에 덧붙여지게 하려면 php.ini파일에서 session.use_trans_sid 옵션을 주고 PHP을 컴파일하면된다. (기본 비활성)

다만 이럴경우 보안 위험이 높아진다고 한다. 이 지시자가 활성화되면 tptus ID가 포함된 URL을 이메일로 보내거나 컴퓨터에 저장하거나 브라우저에 공개적으로 목록이나 북마큭로 저장될 수도 있다.

이 방법을 사용하지 않는다면 세션 ID를 URL에 마치 GET 방식처럼 추가시킬수도 있다. 세션 ID는 SID라는 곳에 저장된다. 마치 GET 파라미터처럼.  


<a href="link.php?<?php echo strip_tags(SID); ?>">



간단한 세션 구현

세션 사용의 기본 단계

ㅇ 세션 시작하기

ㅇ 세션 변수 등록하기

ㅇ 세션 변수 사용하기

ㅇ 변수의 등록을 해제하고 세션 종료시키기


세션 시작하기

1. session_start() 함수의 호출


이 함수는 접속에 대해 이미 존재하고 있는 세션 ID가 있는지 확인하며 없으면 새로 만들고 있으면 기존의 세션 변수들을 재로딩 한다.

세션을 사용하는 스크립트라면 호출이 필요하며 안하면 세션을 쓸수가 없다. 이 함수는 스크립트 처음 시작부분에 쓰는게 좋다.



2. php.ini 파일의 session.auto_start 옵션을 설정


사용자가 사이트를 방문할때 자동적으로 세션이 설정하도록 하는 방법으로 이변수가 활성화 되면 객체를 세션 변수처럼 사용할 수 없다는 단점이 있다. 해당 객체를 위한 클래스 정의는 세션이 시작되어 해당 객체를 생성하기 전에 불러들여야만 한다.


세션 변수 등록하기

PHP에서 세션 변수는 $_SESSION 이라는 전역 배열에 저장된다.


$_SESSION['myvalue'] = value;


세션 변수는 세션이 끝날 떄까지, 또는 의도적으로 등록을 해제할 때까지 유지된다. 또한 php.ini 파일의 session.gc_maxlifetime 값에 따라 자연적으로 종료될 수도 있다. 여기서 초단위로 설정해놓으면 세션이 지속되는 시간이 설정된다.


세션 변수 사용하기

먼저 session_start()를 사용해 세션을 시작하고 $_SESSION['myvalue'] 과 같은 방식으로 접근한다.
세션 변수에 객체를 저장한다면 session_start()로 호출전에 클래스 선언에 포함시켜야 한다.
세션 변수가 설정되어 있는지를 확인할때에는 isset(), empty()를 사용해서 확인할수 있다.

if ( isset ( $_SESSION['myvalue'] ) ) ....

다만 변수가 사용자에 의해 GET이나 POST를 통해서 설정될수 있다는 사실을 유의해야 한다.

변수의 등록을 해제하고 세션 종료시키기

세션 변수의 등록 뿐만 아니라 해제도 가능하다.


unset ( $_SESSION['myvalue'] );


위의 코드를 사용해서 삭제가 가능하며 session_unregister(), session_unset()도 가능하지만 이것은 $_SESSION이 나오기 이전부터 쓰이던 방식이라서 추천하지는 않는다고 한다.


$_SESSION 배열 전체 삭제는 $_SESSION = array(); 이며


세션을 완전히 종료시키려면 위의 함수들을 사용하여 모든 세션 변수의 등록을 해제 하고 다음과 같이 세션 ID까지 지우면 된다.

session_destroy();

세션 관리에 대한 옵션

php.ini 파일에 설정할수 있는 세션에 관한 옵션


옵션 이름 

기본값 

효과 

session.auto_start 

0 ( disabled ) 

자동으로 세션을 시작한다. 

session.cache_expire 

180 

세션은 사용자의 활동이 없으면 일정 시간 후 끊어진다. 이 시간을 설정한다. 

session.cookie_domain 

none 

호스트 이름을 다른 도메인 체계에서도 세션 변수를 공유하여 사용할 수 있다. 

session.cookie_lifetime 

세션 ID에 대한 쿠키가 사용자의 컴퓨터에 얼마나 오래 남아있는지 설정한다. 기본값이 0이라는 것은 브라우저가 닫히면 쿠키가 사라진다는 것이다.

session.cookie_path 

세션 쿠키가 설정되는 경로 

session.name 

PHPSESSID 

사용자의 시스템에서 쿠키 이름으로 사용되는 세션의 이름 

session.save_handler 

files 

세션 데이터가 저장되는 장소, 데이터베이스를 지정할 수도 있지만, 그렇게 하기 위해서는 추가적인 함수가 필요하다. 

session.save_path 

" " 

세션 데이터가 저장되는 경로. 일반적으로 session.save_handler에 의해 정의되고 처리되는 인자를 설정한다. 

session.use_kookies 

1 ( enabled ) 

세션이 클라이언트 측에 쿠키를 사용할지 정해준다. 

session.cookie_secure 

0 ( disabled ) 

쿠키가 안전한 접속을 통해서만 전송되게 할 것인지를 결정한다. 

session.hash_function 

0 ( MD5 )  

세션 ID를 생성할 때 사용할 해쉬 알고리즘을 정한다. 0 은 MD5(128bit)를 의미하며, 1은 SHA-1(160비트) 를 의미한다. 이것은 PHP 5 에서 도입되었다. 

Comments