PHP 9 - 세션

PHP 9 - 세션

세션

값을 전달하지 않고 값을 계속 유지시켜주는 방식

*세션에 많은 정보를 저장하면 안된다.

세션 VS 쿠키

세션에 저장되는 정보는 서버쪽에 저장

쿠키는 브라우저에 저장 (해킹 쉬움)

a.php

"); echo(" passwd = $passwd "); echo("b.php"); ?>

b.php

"); echo(" passwd = $passwd "); echo("b.php"); ?>

a.php b.php

php.ini에 'session.auto_start = 1'로 설정하면 session_start() 함수를 생략 할 수 있다.

$_SESSION["name"] 변수와 $_SESSION["passwd"] 변수에 세션 값을 저장한다.

이들 변수는 session_destroy() 함수나 session_unset() 함수가 호출되기 전까지 계속 유지된다.

▶ 세션 관련 함수

• bool session_start ( void )

- 세션을 시작한다.

- 매개 변수 없이 쓰인다.

- session.auto_start=1로 설정하면 함수를 자동으로 실행한 것과 동일하다.

- $_SESSION 배열을 이용해서 세션 변수를 등록한다.

• bool session_destroy( void )

- 세션을 종료한다.

- 매개 변수 없이 쓰인다.

- 이후 세션을 이용하려면 새로운 세션을 시작해야 한다.

• void session_unset ( void )

- 세션 변수를 모두 초기화 한다.

- 매개 변수와 반환 값이 모두 없다.

- 세션자체를 없애는 것은 아니다.

• string session_id ( void )

- 세션 ID를 반환한다.

세션을 이용한 인증 처리

실선 : 마우스 클릭 / 점선 : 자동으로

• 테이블 입출력 프로그램

- st_vi.php : student 테이블 출력 프로그램

- st_in.html : student 테이블 입력 폼

- st_in.php : student 테이블 입력 프로그램

• 인증 정보(계정) 등록 프로그램

- id.html : 계정 등록 폼

- id.php : 계정 등록 프로그램

• 로긴 프로그램

- check.html : 로긴 정보 입력 폼

- check.php : 로긴 프로그램

세션을 이용한 인증 처리 실습

인증을 위해 미리 테이블을 생성한다.

오라클에 접속해서 생성한다.

SQL> CREATE TABLE id( 2 id varchar2(10), 3 passwd varchar2(32) CONSTRAINT id_nu_passwd NOT NULL, 4 CONSTRAINT user_pk_id PRIMARY KEY (id) 5 ); 테이블이 생성되었습니다.

• 계정 등록 프로그램

id.html

계정등록 ID passwd

id.php

window.alert('계정 등록 장애입니다.'); history.go(-1); "); exit; } // st_vi.php를 호출할 때 $id나 $passwd는 세션변수에 등록되었음으로 else // 전달할 필요가 없다. echo(" "); ?>

• 로긴 프로그램

로긴 프로그램은 st_vi.php로부터 호출된다. st_vi.php의 [login] 버튼을 클릭하면 check.html을 호출하여 id와 패스워드를 입력 받는다.

입력된 id와 패스워드는 POST방식으로 check.php에 전달된다.

check.html

login ID passwd

check.php

"); } else{ echo(" window.alert('잘못된 계정 정보입니다.'); history.go(-1); "); exit; } ?>

• 테이블 입출력 프로그램

st_vi.php를 제외한 st_in.html과 st_in.php는 이전 소스와 동일해서 생략한다. st_vi.php는 로그인 상태와 로그인되지 않은 상태에 따라 출력 내용이 달라진다.

로그인 상태인 경우 데이터를 입력 버튼을 보여주지만 로그인이 아닌 상태에서는 로그인과 등록 메시지만 보여준다.

st_vi.php

자료 입력하기 logout "); } else{ // 비로긴 상태 echo(" 계정등록 login"); } //==========================자료입력======================================== //echo("자료 입력하기"); //require('conn.php'); //==========================삭제기능======================================== $del=$_GET[del]; // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다. if (empty($del)){} else { $sql="delete from student where sno='$del'"; $result=oci_parse($conn,$sql); oci_execute($result); oci_free_statement($result); } //==========================검색기능========================================= $search = $_GET[search]; if (empty($search)) { $sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr from student order by sno"; $result=oci_parse($conn,$sql); } else { $sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr from student where sname like '%{$search}%' order by sno"; $result=oci_parse($conn,$sql); } oci_execute($result); //========================================================================== $row_num=oci_fetch_all($result, $row); // $row_num : 전제 행의 수 //echo("Row의 개수는 $row_num 입니다."); // 행은 컬럼명, 열은 행번호 oci_free_statement($result); oci_close($conn); $scale=5; // 화면에 출력할 행의 개수 $start = $_GET[start]; if (empty($start)){$start=0;} // 첫 화면은 0에서 시작, 배열의 키값은 0에서 시작 echo(""); for($i=$start; $i<($start+$scale); $i++) { if ($i<$row_num){ echo(" {$row['SNO'][$i]} {$row['SNAME'][$i]} {$row['SEX'][$i]} {$row['SYEAR'][$i]} {$row['MAJOR'][$i]} {$row['AVR'][$i]} del "); } } echo(""); $p=$start-$scale; // 이전 화면의 시작 위치 $n=$start+$scale; // 다음 화면의 시작 위치 if($p>=0) echo("[이전페이지] "); else echo("이전페이지 "); if($n<$row_num) echo("[다음페이지]"); else echo("다음페이지"); //echo(""); //echo($search); // 확인하기 위해 search 변수 출력 echo(""); echo("$row_num 열이 검색됨"); ?> 검색창

실행결과

login 전

계정을 등록한다.

계정등록

계정을 등록하고 로그인을 클릭한다.

login

로그인이 된다.

login 후

로그인하면 자료 입력하기를 할 수 있다.

from http://lemonandgrapefruit.tistory.com/174 by ccl(A) rewrite - 2021-12-24 17:00:53