การสร้างโปรแกรมประยุกต์เว็บ > Cookie และ Session 
      Session
      
	  เนื่องจาก  HTTP เป็นโปรโตคอลแบบไม่มีสถานะ หมายความว่า  โปรโตคอลนี้ไม่มีวิธีของตัวเองในการรักษาสถานะระหว่าง 2 ทรานแซคชัน เมื่อผู้ใช้ขอ  1 เพจ แล้วตามด้วยอีกเพจ จะสามารถบอกว่าคำขอทั้งคู่มาจากผู้ใช้เดียวกัน  
	   ความคิดของการควบคุม session คือ  ความสามารถในการสืบค้นผู้ใช้ระหว่าง 1 session บนเว็บ  
	  	    session ใน PHP เป็นการขับเคลื่อนด้วย session  ซึ่งเป็นหมายเลขกลุ่มเข้ารหัส session  ID ได้รับการสร้างโดย  PHP และเก็บอยู่ที่ด้านลูกข่ายตลอดอายุของ  session และสามารถเก็บบน  เครื่องคอมพิวเตอร์ของผู้ใช้ หรือ ส่งผ่าน URL 
	  	    บางครั้งอาจจะใช้เว็บเก็บ session id ใน URL  ถ้ามีข้อความของข้อมูลสุ่มใน URL นี่เป็นอีกรูปแบบของการควบคุม  session  
	    ขั้นตอนพื้นฐานของการใช้ session  คือ 
	  
	    - 	     เริ่มต้น session
 
        - ลงทะเบียนตัวแปร session
 
	    - 	      ใช้ตัวแปร session 
 
	    - 	       ถอนทะเบียนตัวแปรและลบ session 
 
	   
	  เริ่มต้น Session 
	  ก่อนใช้การทำงาน session  ต้องเริ่มต้น session  ซึ่งมี 3 วิธี คือ 
	  	    วิธีแรก เริ่มต้นสคริปต์ด้วยการเรียกฟังก์ชัน session_start 
	    session_start( ); 
	  ฟังก์ชันนี้ตรวจสอบ session  id ปัจจุบันถ้าไม่จะสร้างขึ้นมา  ถ้ามีอยู่แล้วจะโหลดตัวแปร session จดทะเบียนจากจะสามารถใช้ได้ การเรียก session_start  ( ) ควรอยู่ที่เริ่มต้นของสคริปต์ที่ใช้  session 
	  	    วิธีที่ 2 session ที่เริ่มต้นเมื่อพยายามจดทะเบียนตัวแปร  session 
	  	    วิธีที่ 3 session สามารถเริ่มต้นด้วยการตั้งค่า PHP  ให้เริ่มต้นอย่างอัตโนมัติเมื่อมีคน  เข้ามายังเว็บ ควรทำลักษณะนี้ใช้ตัวเลือก session_auto_start ในไฟล์ php.ini 
	  การลงทะเบียนตัวแปร Session
	  	    ในการสืบค้นตัวแปรจากสคริปต์หนึ่งไปยังอีกแห่ง  ต้องมีการลงทะเบียนด้วยการเรียก session_register  ( ) ตัวอย่างเช่น  ลงทะเบียนตัวแปร $myvar 
	    $myvar1 = 5;  
	    session_register("myvar1"); 
	   ใน PHP5 สามารถตั้งค่าไปที่  $_SESSION array ได้โดยตรง  
	    $_SESSION['myvar2'] = "Hello world"; 
	  หมายเหตุ    การส่งผ่านข้อความเก็บชื่อตัวแปรไปยัง  session_register ข้อความนี้ต้องไม่มีสัญลักษณ์  $ 
	  ตัวแปรจะถูกบันทึกและสืบค้นค่า  ตัวแปรจะได้รับการสืบค้นจนกระทั่ง session สิ้นสุดหรือจนกระทั่งถอนทะเบียน  
	    การลงทะเบียนสามารถทำได้มากกว่า 1  ตัวแปรในครั้งเดียวโดยการใช้เครื่องหมายจุลภาคแบ่งชื่อตัวแปร  
	    session_register("myvar1", "myvar2");  
	  การเก็บค่าของตัวแปร Session 
	  	    เมื่อเริ่มต้น session แล้วจะทำให้ตัวแปร  session มี scope  ที่สามารถใช้ได้  
	  	    จากนั้นสามารถเข้าถึงตัวแปรนั้น ถ้า register_globals  เป็น on  จะเข้าถึงผ่านชื่อรูปแบบย่อ  เช่น $myvar ถ้าไม่เป็น on  การสืบตัวแปรผ่าน $_SESSION เช่น $_SESSION["myvar"] ถ้าตั้งค่า  register_long_arrays เป็น  on ในไฟล์ php.ini  จะสามารถใช้ $HTTP_SESSION_VARS  
	  	    ตัวแปร session ไม่สามารถเขียนทับโดย POST  และ GET  ซึ่งเป็นส่วนความปลอดภัยที่ดี  แต่มีความ ยุ่งยากบ้างเมื่อเขียนคำสั่ง  
	    ตรวจสอบการลงทะเบียนตัวแปร session สามารถเรียกฟังก์ชัน session_is_registered 
	    $result = session_is_registered("myvar"); 
	  คำสั่งนี้ตรวจว่า $myvar เป็นตัวแปร  session ที่ลงทะเบียนและส่งออก  TRUE หรือ FALSE  นอกจากนี้สามารถตรวจสอบตัวแปรกับ  $_SESSION array ได้ 
	  การใช้ Cookie กับ Session
	  	    cookie มีปัญหาที่เกี่ยวข้องคือ บาง browser  ไม่ยอมรับ  cookie และผู้ใช้บางคนอาจจะไม่ให้ใช้  cookie กับ  browser ของพวกเขา  ที่เป็นเหตุผลหนึ่งที่ session ของ PHP ใช้เมธอดคู่ cookie/URL 
	  	    เมื่อใช้ session ของ PHP  จะไม่ต้องตั้งค่า cookie  เองฟังก์ชัน  session จะดูแลเรื่องนี้ให้  
	  	    ฟังก์ชัน session_get_cookie_params  ( ) สามารถใช้ดูข้อมูลของ  cookie ที่ตั้งค่าโดยการควบคุม  session และส่งออก  array ที่สัมพันธ์  เดิมหน่วยข้อมูล lifetime, path, domain และ secure 
	    รวมทั้งสามารถใช้  
	    session_set_cookie_params ($lifetime, $path, $domain, $secure); 
	     
	    เพื่อตั้งค่าพารามิเตอร์  session cookie  
	  Session ID
	  	    PHP จะใช้ cookie โดยค่าเริ่มต้นด้วย session  ถ้าเป็นไปได้  cookie จะได้รับการตั้งค่าเพื่อเก็บ  session id โดย session  id มีลักษณะนี้ 
	  	    PHPSESSID8e8c198c623d1f726931d93928b4e07a  
	     
	    วิธีต่อมาคือการใช้  session id กับ  URL การตั้งค่านี้เกิดขึ้นอย่างอัตโนมัติ  ถ้าคอมไฟล์ PHP ด้วยตัวเลือก - - enabletranssid นอกจากนี้ อีกวิธีคือสามารถฝัง session  id ในการเชื่อมโยง  ดังนั้นส่งผ่านได้ session ID ได้รับการเก็บในค่าคงที่ SID  การส่งผ่านเองให้เพิ่มไปยังท้ายของการเชื่อมโยงคล้ายกันกับพารามิเตอร์  GET  
<a href="link.php?<?=sid?"> 
	   โดยทั่วไป จะเป็นการง่ายกว่าด้วยการคอมไฟล์ - -  enabletranssid เป็นไปได้  หมายเหตุ รวมถึงค่าคงที่ SID จะทำงานเฉพาะแบบนี้คอนฟิก PHP ด้วย -  - enabletrackvars  เป็นการใช้ session อย่างง่าย  
	  ถอนทะเบียนตัวแปรและลบ Session 
	  	    เมื่อเสร็จสิ้นการใช้ตัวแปร การถอนทะเบียนตัวแปร  สามารถใช้ฟังก์ชัน session_unregister ( ) 
	    session_unregister("myvar1"); 
	   ฟังก์ชันนี้ต้องการชื่อตัวแปรที่จะถอนทะเบียนเป็นข้อความและไม่มีสัญลักษณ์  $ ฟังก์ชันนี้สามารถถอนทะเบียนเพียง  1 ตัวแปร session ในแต่ละครั้ง อย่างไรก็ตามสามารถใช้ session_unset (  ) เพื่อถอนทะเบียนตัวแปร  session ปัจจุบันทั้งหมด  
	  	    เมื่อเสร็จสิ้น session ให้ถอนทะเบียนตัวแปรทั้งหมดและทำความสะอาด  session id 
      session_destroy(); 
	   ลบ cookie 
	    setcookie(session.name(), "",  time()-3600);  
	     
	    จากนั้นลบข้อมูลใน  $_SESSION array  ว่างเปล่า  
	    $_SESSION = array(); 
	  ตัวอย่างการทำงานของ Session
	  	    ตัวอย่างนี้จะใช้ 3 เพจ บนเพจแรก จะเริ่มต้นและอ่านข้อมูลเข้าสู่อ๊อบเจคที่เป็น  constructor ที่สร้างมาจากไฟล์รวม   empinfo.inc  ตามรายการคำสั่ง 2.1.1  
	  รายการคำสั่ง 2.1.1  empinfo.inc 
	  
        
            
              <?php  
              //empinfo.php 
            class EmpInfo 
              { 
            
                            private $emp_id; 
                private    $userName; 
                private $empName; 
                private $address; 
                private $salary; 
               function    __construct($in_emp_id, $in_userName, $in_empName, $in_address, $in_salary) 
                { 
              
                 $this->emp_id = $in_emp_id; 
                  $this->userName = $in_userName; 
                  $this->empName    = $in_empName; 
                  $this->address = $in_address; 
                  $this->salary    = $in_salary; 
               
                            } 
              public function    get_UserID() { return $this->emp_id; } 
                public function    get_UserName() { return $this->userName; } 
                public function    get_EmpName() { return $this->empName; } 
                public function    get_Address() { return $this->address; } 
                public function    get_Salary() { return $this->salary; } 
             
                          } 
            ?>  | 
         
       
	                  การอ่านข้อมูลจากอ๊อบเจคและส่งค่าให้ $_SESSION array  ทำในเพจที่ 1 และแสดงผลด้วยฟังก์ชัน var_export และ  var_dump เพื่ออ่านค่าตัวแปรและค่าของ session ตามรายการคำสั่ง 2.1.2  
	  รายการคำสั่ง 2.1.2 session_03_obj1.php 
	  
        
            
              <?php   
              //    session_03_obj1.php 
            require_once('empinfo.inc'); 
              ini_set('session.name', 'EMPSESSION'); 
              session_start(); 
                          ?> 
            <html> 
  <head> 
  <title>Read Object to Session</title> 
  <meta http-equiv="Content-Type"    content="text/html; charset=tis-620"> 
  </head> 
  <body> 
  <?php 
              // 
              // สาธิตการตั้งค่าอ๊อบเจคไปยังตัวแปร session 
              $emp = new EmpInfo(123123, "somsaks", "สมศักดิ์ แสงทอง",  
  "145 ถนนเสรีไทย แขวงบึงกุ่ม เขตบึงกุม กทม.", 12500); 
            $_SESSION['current_emp'] = $emp; 
            var_export($_SESSION); 
              echo "<br/><br/>\n"; 
              var_dump(session_id()); 
              echo "<br/>\n"; 
              var_dump(session_name()); 
              echo "<br/>\n"; 
              var_dump(session_get_cookie_params()); 
              echo "<br/>\n"; 
            ?> 
            <br/><br/> 
  <a href="session_02_obj2.php">คลิกไปหน้าต่อไป</a> 
  <br/> 
  </body> 
  </html>  | 
         
       
	  ผลลัพธ์ของเพจ 
	    array ( 'current_emp' => EmpInfo::__set_state(array(  'emp_id' => 123123, 'userName' => 'somsaks', 'empName' => 'สมศักดิ์ แสงทอง', 'address' => '145 ถนนเสรีไทย  แขวงบึงกุ่ม เขตบึงกุม กทม.', 'salary' => 12500, )), ) 
         
        string(32) "704e7ef925717c5060d5bd5c54db98c5"  
        string(10) "EMPSESSION"  
        array(4) { ["lifetime"]=> int(0) ["path"]=> string(1)  "/" ["domain"]=> string(0) ""  ["secure"]=> bool(false) }  
	   เมื่อเริ่มต้นสคริปต์ต่อไปโดยการเรียก session_start  ( )  และส่งค่าจาก $_SESSION  array ไปยังอ๊อบเจค  emp สำหรับการแสดงผล การส่งผ่านทำตามปกติ  
	    $emp =  $_SESSION['current_emp']; 
	  การเริ่มต้น session และลบ session  
	  <?php 
	  	    //  delete session 
	    session_destroy(); 
	    //  delete session cookie 
	    setcookie(session_name(),  "", time()-3600); 
	    //  destroy $_SESSION  array 
	    $_SESSION = array(); 
	  	    ?> 
	  จากนั้นให้ฟังก์ชันแสดงผลลัพธ์จะปรากฎเป็นค่าว่าง 
	  No  more $emp as object. 
array(0) { }  
string(0) ""  
string(10) "EMPSESSION"  
array(4) { ["lifetime"]=> int(0) ["path"]=> string(1)  "/" ["domain"]=> string(0) ""  ["secure"]=> bool(false) }
   
  
         
			
	  			 |