본문 바로가기

PHP/PHP Programming

[PHP] 세션

반응형

01. 세션의 개요


 세션(Session)도 쿠키와 유사한 개념이지만, 쿠키는 정보를 사용자 컴퓨터에 저장하는 반면에 세션은 정보를 사용자 컴퓨터와 서버 양쪽에 나누어 저장한다. 사용자 컴퓨터에 저장된 쿠키 정보가 나쁜 목적으로 이용되거나 조작될 위험이 크기 때문에 보안을 강화하는 목적으로 PHP4 버전 이후에 세션이라는 개념이 추가되었다. 웹 사이트를 방문하는 사용자 컴퓨터에 세션 ID(SID, Session ID) 정보를 저장하고, 서버에는 사용자 컴퓨터의 세션 ID에 대응하는 정보를 저장한다. 그리고 두 정보가 서로 짝이 맞아야 서버에서 데이터를 처리할 수 있다. 따라서 사용자 컴퓨터의 세션 아이디가 유출되더라도, 세션 아이디 자체에는 별다른 정보가 없고 주요 정보는 서버에 저장되기 때문에 쿠키보다 안전하다.










02. 세션 시작과 등록


 session01.php

01
02
03
04
05
06
07

08

09

10

11

12

13

14

15

16

17

18

19

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>세션의 활성화와 등록</title>
</head>
<?
    session_start();

    echo "세션 시작!!!<p>";
    $_SESSION['userID'] = "wicked";
    $_SESSION['userName'] = "사악미소";
    $_SESSION['time'] = time();                // time()은 현재 시각

    echo "세 개의 세션 변수 등록 완료!!!<br/>";
    echo $_SESSION['userID']."<br/>";
    echo $_SESSION['userName']."<br/>";
    echo $_SESSION['time']."<br/>";
?>
</html>

 출력결과




① 세션 시작

 7행 세션을 사용하려면 반드시 session_start( ) 함수로 세션을 활성화시켜야 한다. 따라서 세션을 사용하는 프로그램에서 session_start( ) 함수는 코드의 맨 앞에 위치한다.


② 세션 등록

  10 ~ 12행 세션 변수 userID, userName, time을 등록한다. 배열 형태의 전역 변수인 $_SESSION[ ]의 인덱스에 세션 변수의 이름을 넣고, 변수값을 입력하는 방법으로 세션을 등록한다. 즉, userID,를 등록하려면 $_SESSION['userID']라고 입력한다.


③ 세션 변수 출력

 15 ~ 17행 등록된 세션 변수 세 개를 echo 문으로 출력한다.









03. 세션 사용 방법


 등록한 세션은 쿠키처럼 php.ini의 register_blobals 파라미터 설정에 따라 두 가지 방법으로 사용할 수 있다.


① register_globals = On : 배열 변수 $_SESSION[ ]을 사용할 필요 없이, 세션 변수의 이름을 변수명으로 사용한다.

② register_globals = OFF : 배열 변수 $_SESSION[ ]을 사용한다.



① register_globals가 On인 경우


 php.ini에서 register_globals를 On으로 설정했다면 아래와 같이 세션의 이름을 그대로 변수명으로 사용한다.


 session02.php

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>register_globals=On인 경우에 세션 사용</title>
</head>
<?
    session_start();

    $time = date('Y-m-d(H:i:s)', $time);
?>
<body>
<h3>▶ 등록된 세션의 사용</h3>
<table width = "400" border = "1">
    <tr>
        <td>아이디</td>
        <td>이름</td>
        <td>현재시각</td>
    </tr>
    <tr>
        <td><?= $id ?></td>
        <td><?= $name ?></td>
        <td><?= $time ?></td>
    </tr>
</table>
</body>
</html>

 출력결과



① 세션 시작

 7행 세션을 사용하기 전에 반드시 session_start( )로 세션을 활성화시킨다.


② 세션 사용

 9행 date( ) 함수를 이용해 날짜와 시간을 알맞은 형태로 세션 변수 $time에 저장한다.


 20 ~ 22행 등록한 세션 변수들을 <td> 태그로 처리하여 표 형태로 출력한다. 세션 변수의 이름 (userID, userName, time)을 그대로 변수명($userID, $userName, $time)으로 사용한다. 





② register_globals가 Off인 경우


 register_globals가 Off로 설정했다면 배열 변수 $_SESSION[ ]을 사용해야 한다.


  session03.php

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>register_globals=Off인 경우에 세션 사용</title>
</head>
<?
    session_start();

    $id = $_SESSION['userID'];
    $name = $_SESSION['userName'];
    $time = $_SESSION['time'];

    $time = date('Y-m-d(H:i:s)', $time);
?>
<body>
<h3>▶ 등록된 세션의 사용</h3>
<table width = "400" border = "1">
    <tr>
        <td>아이디</td>
        <td>이름</td>
        <td>현재시각</td>
    </tr>
    <tr>
        <td><?= $id ?></td>
        <td><?= $name ?></td>
        <td><?= $time ?></td>
    </tr>
</table>
</body>
</html>

 출력결과


 9 ~ 11행에서 배열 변수 $_SESSION[ ]을 사용하는 부분만 다르고, register_globals가 Off일 때 쿠키를 사용하는 방법과 유사하다.







04. 세션 삭제


 세션은 unset( ) 함수를 사용해 삭제할 수 있다.


 delete_session.php

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>세션 삭제</title>
</head>
<?
    session_start();

    unset($_SESSION['userID']);
    unset($_SESSION['userName']);
    unset($_SESSION['time']);
?>
<body>
<h3>▶ 세션의 삭제</h3>
<table width = "400" border = "1">
    <tr>
        <td>아이디</td>
        <td>이름</td>
        <td>현재시각</td>
    </tr>
    <tr>
        <td><?= $_SESSION['userID'] ?>&nbsp;</td>
        <td><?= $_SESSION['userName'] ?>&nbsp;</td>
        <td><?= $_SESSION['time'] ?>&nbsp;</td>
    </tr>
</table>
</body>
</html>

 출력결과


 9 ~ 11행 에서 unset( ) 함수를 이용하여 세션 변수 세 개를(userID', 'userName', 'time') 삭제한다.

 22 ~ 24행에서 $_SESSION[ ] 값을 화면에 출력한다. 모든 세션 변수가 비어있는 것을 통해 세션이 삭제되었음을 알 수 있다.

반응형