웹프로그래밍 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 세션변수 (Session Variable) (1/2) 쇼핑몰장바구니 장바구니에서는사용자가페이지를이동하더라도장바구니의구매물품리스트의내용을유지하고있어야함 PHP 에서사용하는일반적인변수는스크립트의수행이끝나면모두없어지기때문에페이지이동시변수의값을유지할수없음 이러한문제점을해결하기위해서 PHP 에서는세션 (session) 을제공 Page 2 1
세션변수 (Session Variable) (2/2) 일반변수와세션변수 일반변수 지역변수 (local variable): 변수의범위는한함수의내부로제한 ( 함수내부 ) 전역변수 (global variable): 변수가속하는스크립트가실행되는동안값을유지 ( 스크립트내부 ) 세션변수 전역변수보다더큰범위동안값을유지 ( 문서간에도범위유지 ) 명시적으로변수를없애지않는한그값을유지 Page 3 전역변수 vs. 지역변수 (1/2) 프로그램예제 (g_l_var1.php) function A () global $n; $n = A ; $m = A ; print $n, $m<br> ; $n = M ; $m = M ; print $n, $m<br> ; A (); print $n, $m<br> ; 프로그램실행결과 M, M A, A A, M 위프로그램에서함수 A() 안에서 $n은전역변수로, $m은지역변수로사용 따라서, 함수 A() 를호출하고나서 $n의값은변했지만 $m은변하지않음 Page 4 2
전역변수 vs. 지역변수 (2/2) 프로그램예제 (g_l_var2.php) function A() global $n; print $n. <br> ; function B() $n = B ; // local variable A(); $n = M ; // global variable A(); B(); 프로그램실행결과 M M 함수 B() 에서 $n 은지역변수이므로, 적용결과 ($n = B ) 가스크립트의전역변수인 $n 에영향을주지않음에유의 Page 5 세션변수의예제 (1/2) page1.php $G = This is a Global variable ; <a href=./page2.php > 다음페이지 </a> page2.php print $G; 상기프로그램 (page1.php page2.php) 을실행하면아무것도출력되지않음 전역변수는한스크립트가끝나면그변수가소멸되기때문 따라서세션변수를사용하여변수값을유지하는방법을이용 Page 6 3
세션변수의예제 (2/2) 세션을이용한예 (page_session1.php, page_session2.php) session_register( G ); $G = This is a Global variable ; <a href=./page_session2.php > 다음페이지 </a> session_start (); print $G; Page 7 세션변수의선언 (1/5) session_register() bool session_register (mixed name [, mixed...]) 세션변수를등록할때사용하는함수임 name 은세션변수의이름이되며, 이함수를한번사용하여여러개의변수를한꺼번에등록시킬수있음 session_start() bool session_start (void) 세션변수의사용을시작할때사용하는함수임 세션이시작되면, 세션이정의된모든세션변수는전역변수로선언되어짐 Page 8 4
세션변수의선언 (2/5) session_id() string session_id ([string id]) 세션은사용자에게유일한값인세션 ID를부여하여다른사용자와구분함 session_id() 함수를이용하여현재사용자의세션 ID를알수있음 session_save_path() string session_save_path ([string path]) 지정되어있는 PATH 로이동하면 sess_ 로시작하는파일에저장 Page 9 세션변수의선언 (3/5) session_id() 예제 (session_id.php) session_register ( session_var ); $session_var = This is a Session variable ; print 세션ID:. session_id (); Page 10 5
세션변수의선언 (3/5) session_save_path() 예제 (session_save_path.php) print 세션의저장위치 :. session_save_path (); Let s see C:/APM_Setup/phptemp Page 11 세션변수의선언 (4/5) 배열형변수의세션등록 (arr_session.php, arr_session_view.php) session_register ( fruit ); $fruit = array ( Apple, Banana, Pear, Orange ); <a href=./arr_session_view.php > 확인 </a> session_start (); foreach ($fruit as $fr) print $fr<br> ; Page 12 6
세션변수의선언 (5/5) 실행결과 : 배열형변수의세션등록 Page 13 세션의조작 (1/3) session_unregister() bool session_unregister (string name) name: 등록을취소하고자하는변수의이름 등록이성공적으로취소되었을때 TRUE를리턴 session_unset() void session_unset (void) 등록된변수들의값을초기화 (initialization) session_destroy() bool session_destroy (void) 등록된변수들을파괴 (destruction) Page 14 7
세션의조작 (2/3) 세션변수의등록취소 (session_reg_unreg1/2.php) session_register ( var1 ); session_register ( var2 ); $var1 = Variable1 ; $var2 = Variable2 ; session_unregister() 함수를이용하여 $var2 를제거 session_unregister ( var2 ); <a href=./viewvar.php > 확인페이지 </a> session_start (); print $var1<br> ; print $var2 ; Page 15 세션의조작 (3/3) session_unset(), session_destroy() 의사용예 (session_mani1/2/3.php) session_register ( apple ); $apple = 4; <a href=./session_mani2.php >session_unset() 함수사용 </a><br> <a href=./session_mani3.php >session_destroy() 함수사용 </a> session_start (); session_unset (); print $apple; session_unset: 변수값초기화 session_destroy: 세션데이터파괴 session_start (); session_destroy (); print $apple; Page 16 8
간단한장바구니구현 (1/7) session/products.inc $fruit = array ( 사과 => 10, 배 => 20, 복숭아 => 30, 수박 => 40, 감 => 50, 토마토 => 60, 바나나 => 70, 키위 => 80, 파인애플 => 90, 대추 => 100); Page 17 간단한장바구니구현 (2/7) session/product_list.php <html> <body> <p><font size= 6 > 제품목록 </font></p> <p><a href= cart.php > 장바구니 </a></p> <table width= 420 border= 1 cellpadding= 1 > <tr align= center > <td width= 200 > 이름 </td> <td width= 80 > 가격 </td> <td width= 140 > 장바구니 </td> </tr> include (./products.inc ); while (list ($name, $price) = each ($fruit)) <form name= insert_form method= post action=./cart.php?code=insert&name=<?=$name > Page 18 9
간단한장바구니구현 (3/7) session/product_list.php ( 계속 ) <tr> <td width= 200 ><?=$name</td> <td width= 80 align= right ><?=$price 원 </td> <td width= 140 align= center > 수량 <select name= amount > <option value=1>1</option><option value=2>2</option> <option value=3>3</option><option value=4>4</option> <option value=5>5</option> </select> <input type= submit name= submit value= 추가 > </td> </tr> </form> </table> </body> </html> Page 19 간단한장바구니구현 (4/7) 출력결과 (product_list.php) Page 20 10
간단한장바구니구현 (5/7) session/class.inc class Cart var $contents; function add ($name, $amount) $this->contents[$name] = $amount; function delete ($name) if (count ($this->contents) > 0) while (list ($key, $value) = each ($this->contents)) if ($key!= $name) $new_cart[$key] = $value; $this->contents = $new_cart; function get_list() return $this->contents; function get_count() return count ($this->contents); Page 21 간단한장바구니구현 (6/7) 세션시작및장바구니객체생성, 메소드이용 (session/cart.php) 자세한 Source 는교제참조 include (./class.inc ); include (./products.inc ); session_start (); if (!session_is_registered ( cart )) $cart = new Cart; session_register ( cart ); if ($code == insert ) $cart->add ($name, $amount); else if ($code == delete ) $cart->delete ($name); Page 22 11
간단한장바구니구현 (7/7) 현재장바구니의상황을보여주는부분 (session/cart.php) 자세한 Source 는교재참조 if ($cart->get_count ()) $sum = 0; $contents = $cart->get_list (); while (list ($name, $value) = each ($contents)) $sum += $value[amount] * $fruit[$name]; print 이름 :. $name. <br> ; print 수량 :. $value[amount]. <br> ; echo 총합 :. $sum. <br> ; Page 23 12