< Session Handling with PHP 4 >

 

ÀúÀÚ : Tobias Ratschiller

¹ø¿ª : ±è¼öÈñ(ketchup@wowlinux.com)

 

1. Target Audience

2. Introduction

3. PHP's Built-in Session Library

4. Goals of the Tutorial

5. Basic Terms (±âº» ¿ë¾î)

6. Background Information

7. Preliminary Tips and Prerequisites (¿¹ºñ tip°ú ¼±ÇàÁ¶°Ç)

8. Starting a Session (¼¼¼Ç ½ÃÀÛÇϱâ)

9. Ending a Session (¼¼¼Ç Á¾·áÇϱâ)

10. Storage Modules

11. Session ID Propagation (¼¼¼Ç ID Àü´Þ)

12. Example Code

 

 

Target Audience

ÀÌ tutorialÀº °í±Þ PHP °³¹ßÀÚ¸¦ À§ÇÑ °ÍÀÔ´Ï´Ù.

¿©±â¼­´Â ´ç½ÅÀÌ ÀÌ¹Ì Äí۸¦ »ç¿ëÇÒ ÁÙ ¾È´Ù°í °¡Á¤ÇÕ´Ï´Ù.

¶ÇÇÑ POST³ª GET method¸¦ ÀÌ¿ëÇØ ÇÑ ÆäÀÌÁö¿¡¼­ ´Ù¸¥ ÆäÀÌÁö·Î µ¥ÀÌÅ͸¦ ³Ñ±æ ÁÙµµ ¾Ë¾Æ¾ß ÇÕ´Ï´Ù.

 

 

Introduction

PHP3¿Í´Â ´Þ¸® PHP4´Â ¼¼¼Ç °ü¸® ±â´ÉÀÌ ±âº»ÀûÀ¸·Î Á¦°øµË´Ï´Ù.

PHP4ÀÇ ¼¼¼Ç °ü¸® ±â´ÉÀº »ç¿ëÇϱ⠽±°í, °­·ÂÇϸç Çʿ信 µû¸¥ º¯°æÀÌ °¡´ÉÇÕ´Ï´Ù.

¼¼¼ÇÀº ƯÁ¤ÇÑ »ç¿ëÀÚ°¡ ´ç½ÅÀÇ À¥ »çÀÌÆ®¸¦ ¹æ¹®Çϰí ÀÖ´Â µ¿¾È ±× »ç¿ëÀÚÀÇ ÇൿÀ» ÃßÀûÇϵµ·Ï ÇÕ´Ï´Ù.

¼¼¼Ç µ¥ÀÌÅ͸¦ ÇÑ »ç¿ëÀÚ¿Í ¹­±â À§Çؼ­´Â, Ű ¿ªÇÒÀ» ÇÏ´Â ¼¼¼ÇID°¡ ÇÊ¿äÇÕ´Ï´Ù.

ÀÌ tutorialÀº ¼¼¼ÇÀ» ¿­°í, ¼¼¼Ç µ¥ÀÌÅ͸¦ ÃßÀûÇϸç, ´õ ÀÌ»ó ÇÊ¿äÇÏÁö ¾ÊÀ»¶§ µ¥ÀÌÅ͸¦ »èÁ¦ÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ³íÇÕ´Ï´Ù.

 

 

PHP's Built-in Session Library

´ÙÇàÈ÷µµ PHP4´Â ±âº» ¼¼¼Ç°ü¸®°¡ Á¦°øµÇ¾î, ¼¼¼Ç ID¸¦ ¹ß¸íÇϰí, ¼¼¼Ç µ¥ÀÌÅ͸¦ º¸°üÇÏ´Â ÀÛ¾÷À» Á÷Á¢ ÇØ¾ßÇÏ´Â ¼ö°í¸¦ ´ú¾îÁÝ´Ï´Ù.

µû¶ó¼­ ½±°í °£´ÜÇϸç, ¾Æ¸¶µµ ´ç½ÅÀÇ ¿ä±¸¸¦ ¸¸Á·½ÃÄÑÁÙ ¼ö ÀÖÀ»Áö ¸ð¸£Áö¸¸, PHPLib°¡ Á¦°øÇÏ´Â ¸î°¡Áö ±â´ÉµéÀÌ ºÎÁ·ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

 

Goals of the Tutorial

ÀÌ tutorial¿¡¼­ ´ç½ÅÀº ¾Æ·¡¿Í °°Àº ³»¿ëÀ» ¹è¿ï ¼ö ÀÖ½À´Ï´Ù.

 

  ¼¼¼ÇÀ̶õ?

  persistent variables ÀÇ »ç¿ë¹æ¹ý

  ¼¼¼ÇID°¡ ÀÌ ÆäÀÌÁö¿¡¼­ ´Ù¸¥ ÆäÀÌÁö·Î ¾î¶»°Ô Àü´ÞµÇ´Â°¡

  ¼¼¼ÇÀ» Á¾·áÇÏ°í µ¥ÀÌÅ͸¦ ÃʱâÈ­ÇÏ´Â ¹æ¹ý

  ¼¼¼Çµ¿¾È º¯¼ö¸¦ µî·ÏÇÏ´Â ¹æ¹ý

  ¾Æ·¡¸¦ Æ÷ÇÔÇÏ´Â PHP 4.0ÀÇ ¼¼¼Ç °ü¸®ÇÔ¼öÀÇ »ç¿ë¹ý

     session_register()

     session_start()

     session_destroy()

     gc_probability()

     gc_maxlifetime

     serialize()

     deserialize()

     session_save_path()

  PHP°¡ ¼¼¼Ç µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â ¹æ¹ý

 

 

Basic Terms (±âº» ¿ë¾î)

¼¼¼Ç°ü¸®´Â ¾î¶² ±â°£µ¿¾È µ¿ÀÏÇÑ »ç¿ëÀڷκÎÅÍÀÇ ¿äû¿¡ ´ëÇÑ »óŸ¦ À¯ÁöÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

¼¼¼ÇÀ̶õ ¿ë¾î´Â ƯÁ¤ À¥ »çÀÌÆ®¿¡ »ç¿ëÀÚ°¡ ¸Ó¹«¸£´Â ½Ã°£À» ¶æÇÕ´Ï´Ù.

¹®Á¦´Â HTTP´Â »óŸ¦ À¯ÁöÇÏ´Â ±â´ÉÀ» °®°í ÀÖÁö ¸øÇϹǷΠ°¢°¢ÀÇ ¿äûÀº ¼­·Î¿Í °ü·Ã¼ºÀ» °®Áö ¸øÇÑ´Ù´Â Á¡ÀÔ´Ï´Ù.

À¥¼­¹ö´Â ½±°Ô °³ÀÎ »ç¿ëÀÚµéÀ» ±¸ºÐÇÏÁö ¸øÇÏ°í »ç¿ëÀÚÀÇ ¼¼¼Ç¿¡ ´ëÇØ¼­ ¾ËÁö ¸øÇÕ´Ï´Ù.

¼¼¼Ç°ü¸®´Â À¥ÆäÀÌÁö¿¡ ¸Ó¹«¸£´Â ÇÑ »ç¿ëÀÚ¿Í µ¥ÀÌÅ͸¦ ¹­´Â ¹æ¹ýÀ» ¶æÇÕ´Ï´Ù.

ÀÌ tutorial¿¡¼­´Â ¼¼¼ÇÀ̶õ ¿ë¾î°¡ ÇÑ »ç¿ëÀÚÀÇ ÇѹøÀÇ ¹æ¹®À» ¶æÇÕ´Ï´Ù.

¿¹¸¦ µé¸é, ÀϹÝÀûÀÎ ¿Â¶óÀÎ ¼îÇÎ ¼¼¼ÇÀº ·Î±×Àΰú ¼îÇÎīƮ¿¡ Á¦Ç°À» ³Ö´Â °Í, üũ¾Æ¿ô ÆäÀÌÁö·Î °¡´Â °Í, ÁÖ¼Ò¿Í ½Å¿ëÄ«µå Á¤º¸¸¦

ÀÔ·ÂÇÏ´Â °Í, ÁÖ¹®À» È®ÀÎÇÏ°í ºê¶ó¿ìÀú¸¦ ´Ý´Â °Í ±îÁö¸¦ Æ÷ÇÔÇÕ´Ï´Ù.

PHP 4.0´Â »ç¿ëÀÚ ¼¼¼Ç°ü¸®ÀÇ ÆíÀǸ¦ À§ÇÑ ±âº» ¼¼¼Ç °ü¸® ÇÔ¼ö¸¦ Æ÷ÇÔÇÕ´Ï´Ù.

 

"life of a session"Àº ¼¼¼ÇÀÌ È°¼ºÈ­µÇ¾î ÀÖ´Â ±â°£À» ÀǹÌÇÕ´Ï´Ù.

"Serializing"Àº º¯¼ö¸¦ ¾îµð³ª ÀúÀåµÉ ¼ö ÀÖ´Â ÀÏ¹Ý ¹®ÀÚ¿­·Î º¯È¯ÇÏ´Â °ÍÀ» ¶æÇÕ´Ï´Ù.

serializing ±â´ÉÀÌ ¾ø´Ù¸é PHP array¸¦ µ¥ÀÌÅͺ£À̽º¿¡ ³Ö´Â °ÍÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.

µ¥ÀÌÅÍÀÇ serializingÀº ¼¼¼Ç ¶óÀ̺귯¸®ÀÇ Áß¿äÇÑ Ãø¸éÀÎ µ¥ÀÌÅÍÀÇ ¿äû¿¡ µû¸¥ ÀúÀå¿¡ ¸Å¿ì À¯¿ëÇÕ´Ï´Ù.

serialize()¿Í deserialize() ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, PHP3¿¡¼­ ÀÌ ÇÔ¼öµéÀº °´Ã¼(Ŭ·¡½º)¿¡ ´ëÇØ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.

 

 

Background Information

PHPÀÇ ¼¼¼Ç °ü¸® ¶óÀ̺귯¸®´Â ¼¼¼Ç°ü¸® ¶óÀ̺귯¸®¿¡¼­ ÇÊ¿ä·Î ÇÏ´Â ÁÖ¿ä Æ¯¼ºÀ» Æ÷ÇÔÇÕ´Ï´Ù.

 

  ¼¼¼Ç µ¥ÀÌÅ͸¦ ¼­¹ö¿¡ ÀúÀåÇÕ´Ï´Ù. ¶óÀ̺귯¸®°¡ ´Ù¸¥ ÀúÀå ¸ðµâÀ» »ç¿ëÇϱ⠶§¹®¿¡ µ¥ÀÌÅÍ´Â ÀÏ¹Ý ÅØ½ºÅ© È­ÀÏÀ̳ª °øÀ¯ ¸Þ¸ð¸® ¶Ç´Â

   µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÉ ¼ö ÀÖ½À´Ï´Ù. (¸ÅüÀÇ ÆÛÆ÷¸Õ½º°¡ ÃæºÐÇÑ ÀÌ»ó) µ¥ÀÌÅÍÀÇ Á¤È®ÇÑ À§Ä¡´Â ±×·¸°Ô Áß¿äÇÏÁö ¾Ê½À´Ï´Ù.

  ¾Ïȣȭ µÈ ·£´ýÇÑ ¼¼¼ÇID¸¦ »ç¿ëÀÚ ½Äº°À» À§ÇØ »ç¿ëÇÕ´Ï´Ù.

  ÄíŰ³ª GET/POST, ¶Ç´Â ½ºÅ©¸³Æ® °æ·Î¸¦ ÀÌ¿ëÇØ ¼¼¼ÇID¸¦(¼¼¼ÇID¸¸) Ŭ¶óÀ̾ðÆ®ÂÊ¿¡ ÀúÀåÇÕ´Ï´Ù. (PHP ¶óÀ̺귯¸®´Â ÀÌ ¸ðµç

    ¹æ¹ýÀ» Á¦°øÇÕ´Ï´Ù. Àá½Ã ÈÄ ¾î¶»°Ô À̵éÀ» »ç¿ëÇÏ´ÂÁö º¸°Ô µÉ °ÍÀÔ´Ï´Ù.)

  ¸¸¾à »ç¿ëÀÚ°¡ Äí۸¦ »ç¿ëÇÏÁö ¾ÊÀ» °æ¿ì, ¾îÇø®ÄÉÀ̼ÇÀº ´Ù¸¥ ¼¼¼Ç Àü´Þ ¼ö´ÜÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

 

Preliminary Tips and Prerequisites (¿¹ºñ tip°ú ¼±ÇàÁ¶°Ç)

»ç¿ëÀÚ¿Í ¼¼¼Ç µ¥ÀÌÅ͸¦ ¿¬°áÇϱâ À§Çؼ­´Â »ç¿ëÀÚ¿Í ±× µ¥ÀÌÅ͸¦ ¹­´Â ۰¡ µÇ´Â session identity number°¡ ÇÊ¿äÇÕ´Ï´Ù.

PHP 4.0ÀÇ ¼¼¼Ç °ü¸®´Â ¼¼¼Ç ID¸¦ ¸¸µé°í ¼¼¼Ç µ¥ÀÌÅ͸¦ serializing ÇÏ´Â ÀÛ¾÷ÀÇ ¼ö°í¸¦ ´ú¾îÁÝ´Ï´Ù.

 

Note: ¸¸¾à ±âº» PHP ¼¼¼Ç ÇÔ¼ö ÀÌ»óÀÇ °ÍÀ» ¿øÇÑ´Ù¸é PHPlib°¡ °í±Þ ¼¼¼Ç°ü¸® ÇÔ¼ö¸¦ Á¦°øÇÕ´Ï´Ù.

 

 

Starting a Session (¼¼¼Ç ½ÃÀÛÇϱâ)

PHP 4 ¼¼¼ÇÀº ¸í½ÃÀûÀ¸·Î session_start() ÇÔ¼ö·Î ½ÃÀ۵ǰųª, ÇÔÃàÀûÀ¸·Î session_register()¸¦ »ç¿ëÇØ ¼¼¼Ç º¯¼ö¸¦ µî·ÏÇÔÀ¸·Î½á

½ÃÀ۵˴ϴÙ.

ÀϹÝÀûÀ¸·Î session_start()´Â ÆäÀÌÁöÀÇ ¸Ç À§¿¡¼­ È£ÃâµÇ¹Ç·Î ¼¼¼Ç º¯¼ö´Â ½ºÅ©¸³Æ®¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ°í, ½ºÅ©¸³Æ®¿¡¼­ ¼¼¼Ç¿¡ º¯¼ö¸¦

µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù.

±×·¯³ª session_register()¸¦ ½ºÅ©¸³Æ® Ãʱ⿡ ½á¼­ ¼¼¼Ç º¯¼ö¸¦ µî·ÏÇϰí session_start()¸¦ È£ÃâÇÏÁö ¾Ê¾Æµµ ´Ù¸£Áö´Â ¾Ê½À´Ï´Ù.

¼¼¼ÇÀÌ ½ÃÀÛµÇÁö ¾Ê¾ÒÀ¸¸é session_register()´Â ³»ºÎÀûÀ¸·Î session_start()À» È£ÃâÇϱ⠶§¹®ÀÔ´Ï´Ù.

¼¼¼ÇÀ» ¾î¶»°Ô ½ÃÀÛÇÏ´ø°£¿¡ ¾Æ·¡ÀÇ ÀýÂ÷°¡ ¹ß»ýÇÕ´Ï´Ù.

 

   PHP´Â À¯È¿ÇÑ ¼¼¼ÇID°¡ Á¸ÀçÇÏ´Â Áö È®ÀÎÇÕ´Ï´Ù.

   ¼¼¼ÇID°¡ ¾øÀ¸¸é PHP´Â »õ·Î¿î ID¸¦ ¸¸µì´Ï´Ù.

   À¯È¿ÇÑ ¼¼¼Ç ID°¡ ÀÖÀ¸¸é, µ¿°áµÇ¾î ÀÖ´ø ¼¼¼Ç º¯¼ö´Â ÀçȰ¼ºÈ­ µÇ°í global namespace¿¡ ´Ù½Ã Àü´ÞµË´Ï´Ù.

 

¼¼¼Çº¯¼öÀÇ µî·ÏÀº session_register() ¸í·ÉÀ» ÅëÇØ ÀÌ·ïÁý´Ï´Ù.

ÀÌ´Â ¼¼¼ÇÀ» ÅëÇØ ÀúÀåµÇ°í ¼¼¼Çµ¿¾È ÂüÁ¶µÉ ¼ö ÀÖ´Â º¯¼ö¸¦ ¸¸µé ¼ö (ÀúÀåÇÒ ¼ö)ÀÖµµ·Ï Çã¿ëÇÕ´Ï´Ù.

ÆäÀÌÁö ¿äû¿¡ µû¸¥ ÀúÀåÇϰíÀÚ ÇÏ´Â ¸ðµç º¯¼ö´Â session_register()¿¡ ÀÇÇØ ¼¼¼Ç ¶óÀ̺귯¸®¿¡ µî·ÏÀÌ µÇ¾î¾ß ÇÕ´Ï´Ù.

ÇÔ¼ö°¡ º¯¼ö ÀÚü°¡ ¾Æ´Ñ º¯¼ö ¸íÀ» Àμö·Î ¹Þ´Â ´Ù´Â »ç½ÇÀ» È®ÀÎÇØ ÁֽʽÿÀ.

»ç¿ëÀÚ°¡ ¼îÇÎīƮ·ÎºÎÅÍ ¾ÆÀÌÅÛÀ» »èÁ¦ÇÏ´Â µîÀÇ °æ¿ì¿¡´Â session_unregister()¸¦ »ç¿ëÇÏ¿© ¼¼¼ÇÀ¸·ÎºÎÅÍ º¯¼ö¸¦ »èÁ¦ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

     Syntax Example - Ä«¿îÅÍÀÇ ¿¹Á¦

        session_start();  //¼¼¼ÇÀ» ½ÃÀÛ

        print($counter);  //Ä«¿îÅÍÀÇ °¡Àå ÃÖ±Ù°ªÀ» Ãâ·Â

        $counter++;       //Ä«¿îÅ͸¦ Áõ°¡

        session_register("counter");   //Ä«¿îÅ͸¦ µî·Ï

 

        ¹°·Ð ÀÌ ¿¹Á¦´Â ÀÏ¹Ý ÆäÀÌÁö Ä«¿îÅͿʹ ´Ù¸¨´Ï´Ù.

        ¼¼¼ÇÀº ÇÑ Æ¯Á¤ »ç¿ëÀÚ¿Í ¹­¿© ÀÖ½À´Ï´Ù.

        PHPÀÇ ±âº» ¼³Á¤À¸·Î ¼¼¼Ç ÄíŰÀÇ Áö¼Ó½Ã°£Àº0ÀÔ´Ï´Ù.

        ¸¸¾à ºê¶ó¿ìÀú¸¦ ´Ý°í³ª¼­ ´Ù½Ã ¿­¸é Äí۰¡ Áö¿öÁ³±â ¶§¹®¿¡ Ä«¿îÅÍ´Â 0ºÎÅÍ ´Ù½Ã ½ÃÀÛµÉ °ÍÀÔ´Ï´Ù.

 

     Syntax Example - $foo¶ó´Â º¯¼ö¸¦ µî·Ï

         session_register("foo");

 

     Syntax Example - ¹Ì¸® Á¤ÀÇµÈ ÇÔ¼ö $bar¸¦ µî·Ï

         $bar = "This is a string";

         $foo = "bar";

         session_register($foo);

 

µÎ ¿¹Á¦ÀÇ Â÷ÀÌÁ¡Àº ù¹øÂ° ¿¹Á¦¿¡¼­´Â "foo"¶ó´Â À̸§ÀÇ º¯¼ö°¡ ¼¼¼Çº¯¼ö·Î µî·ÏÀÌ µÇ¾úÁö¸¸, µÎ¹øÂ° ¿¹Á¦¿¡¼­´Â »ç½Ç»ó "bar"¶ó´Â

À̸§ÀÇ º¯¼ö°¡ µî·ÏÀÌ µÇ¾ú´Ù´Â °ÍÀÔ´Ï´Ù.

Session_register()´Â Âø°¢Çϱ⠽±Áö¸¸ ¿¹Á¦¿¡¼­ º¸¿©ÁöµíÀÌ º¯¼ö°¡ ¾Æ´Ñ º¯¼ö¸íÀ» Àμö·Î »ç¿ëÇÕ´Ï´Ù.

 

¼¼¼Ç º¯¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀº GET/POST º¯¼ö¸¦ ´Ù·ç´Â °Í¸¸Å­ ½±½À´Ï´Ù.

foo¶ó´Â À̸§ÀÇ º¯¼ö¸¦ µî·ÏÇϸé session_start() ÇÔ¼ö¸¦ È£ÃâÇÑ ÈÄ ¹Ù·Î $foo¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

PHP4¿¡¼­ serialize() ÇÔ¼ö°¡ °³¼±µÇ¾îÁ³±â ¶§¹®¿¡ °´Ã¼(Ŭ·¡½º)¸¦ ¼¼¼Ç º¯¼ö Ãë±ÞÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù.

 

     Tips

    Note: ¼¼¼ÇÀ» ½ÃÀÛÇÒ¶§ ¼¼¼ÇÀÌ °ÅºÎµÇ°í ºÎÀûÇÕÇÏ´Ù°í Ç¥½ÃµÇ¸é »õID°¡ ¸¸µé¾îÁú ¼ö ÀÖ½À´Ï´Ù.

   ÀÌ´Â ÆäÀÌÁöÀÇ HTTP ÂüÁ¶ÀÚ°¡ ¿ÜºÎ »çÀÌÆ®·ÎºÎÅÍ ¿À¸ç, extern_referer_check ("r"ÀÌ ÇѰ³ÀÓ) °¡ PHP¼³Á¤¿¡¼­ enable µÇ¾îÀÖ±â

   ¶§¹®ÀÔ´Ï´Ù.

   ÀÌ·Î ÀÎÇØ Ãß°¡ÀûÀÎ º¸¾ÈÀ» °¡Á®¿À°Ô µÇ´Âµ¥, »ç¿ëÀÚ·Î ÇÏ¿©±Ý ´Ù¸¥ PHP »çÀÌÆ®·ÎºÎÅÍ ¼¼¼ÇÀ» À̾î¹Þ´Â °ÍÀ» ¹æÁöÇϱâ

    ¶§¹®ÀÔ´Ï´Ù.(±×·¯³ª ¼¼¼ÇID¸¦ ¸¸µé¾î³»´Â µ¥¿¡ »ç¿ëÇÑ ¾Ë°í¸®Áò¶§¹®¿¡ ÀÌ·± ÀÏÀÌ ¹ß»ýÇÒ °¡´É¼ºÀº °ÅÀÇ ¾ø½À´Ï´Ù.).

 

 

 

Ending a Session (¼¼¼Ç Á¾·áÇϱâ)

¼¼¼ÇÀº ÀÚµ¿À¸·Î Á¾·áµÇÁö ¾Ê½À´Ï´Ù. ½Ã½ºÅÛÀÌ ¾ðÁ¦ »ç¿ëÀÚ°¡ ¼¼¼ÇÀ» Á¾·áÇß´ÂÁö ¾Ë¾Æ³»±â°¡ ¾î·Æ±â ¶§¹®ÀÔ´Ï´Ù.

¿©·¯ ¸í·É¾î°¡ ½Ã½ºÅÛÀÌ ¾ðÁ¦ ¼¼¼ÇÀ» Á¾·áÇÒÁö ¾Ë¾Æ³»´Â°¡¸¦ Á¦¾îÇϵµ·Ï µ½½À´Ï´Ù.

session_destroy() ¸í·ÉÀ» ÀÌ¿ëÇØ ¼¼¼Ç Á¾·á¸¦ °­¿äÇÒ ¼ö ÀÖ½À´Ï´Ù.

Äí۸¦ ÀÌ¿ëÇØ ¼¼¼Ç ID¸¦ Àü´ÞÇß´Ù¸é ÄíŰÀÇ µðÆúÆ® Áö¼Ó½Ã°£Àº 0À̹ǷΠ»ç¿ëÀÚ°¡ ºê¶ó¿ìÀú¸¦ ´ÝÀ½°ú µ¿½Ã¿¡ Äí۰¡ Áö¿öÁö°Ô µË´Ï´Ù.

ÄíŰÀÇ Áö¼Ó½Ã°£Àº Áö¼Ó½Ã°£ÀÇ ¼³Á¤°ªÀ» ÀÌ¿ëÇØ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.

gc_maxlifetime ¼³Á¤À» ÅëÇØ ¸¶Áö¸·À¸·Î Á¢±ÙÇÑ ÈÄ ¾ó¸¶³ª Áö³­ ÈÄ¿¡ µ¥ÀÌÅͰ¡ »èÁ¦µÇ¾î¾ß ÇÒ Áö ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ´Â ¼­¹ö°¡ Ŭ¶óÀÌ¾ðÆ®¿¡ Äí۰¡ Á¸ÀçÇÏ´ÂÁö ¿©ºÎ¸¦ ¾Ë ¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù.

±×·¯³ª ¸ðµç ÆäÀÌÁöÀÇ ¿äû¿¡ ´ëÇØ ¿À·¡µÈ ¼¼¼ÇÀ» û¼ÒÇÏ´Â("garbage collection"À̶ó°í ºÒ¸³´Ï´Ù.)µîÀÇ ÀÛ¾÷Àº ½É°¢ÇÑ ¿À¹öÇìµå¸¦

¹ß»ý½Ãų ¼ö ÀÖ½À´Ï´Ù.

±×·¯¹Ç·Î gc_maxlifetimeÀÇ ÅºÁ¨Æ® °ªÀÎ gc_probability¸¦ »ç¿ëÇÏ¿©¾ß ÇÕ´Ï´Ù.

This specifies with what probability the garbage collection routine should be invoked.

gc_probability°¡ 100À̸é, ¸ðµç ¿äû¸¶´Ù ¼¼¼ÇÀ» ºñ¿ó´Ï´Ù.(100%ÀÇ È®·ü); µðÆúÆ®·Î Á¤ÀÇµÈ 1À̶ó¸é ¿À·¡µÈ ¼¼¼ÇÀº ¿äû ¹ß»ý¿¡

´ëÇØ 1%ÀÇ ºñÀ²·Î »èÁ¦µË´Ï´Ù.

¸¸¾à Äí۸¦ »ç¿ëÇÏÁö ¾Ê°í GET À̳ª POST¸¦ ÅëÇØ ¼¼¼Ç ID¸¦ Àü´ÞÇÑ´Ù¸é garbage collection routine¿¡ °ü½ÉÀ» ±â¿ï¿©¾ß ÇÒ Çʿ䰡

ÀÖ½À´Ï´Ù.

»ç¿ëÀÚ´Â ¼¼¼ÇID¸¦ Æ÷ÇÔÇÏ´Â URLÀ» ºÏ¸¶Å©ÇÏ·Á ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¼¼¼ÇÀÌ ÀÚÁÖ ÃʱâÈ­µÇµµ·Ï È®ÀÎÇØ ÁÙ Çʿ䰡 ÀÖ½À´Ï´Ù.

¸¸¾à »ç¿ëÀÚ°¡ ³ªÁß¿¡ ¼¼¼Ç ID¸¦ Æ÷ÇÔÇÏ´Â ÆäÀÌÁö¿¡ Á¢±ÙÇÏ·Á°í ÇÒ¶§ ¼¼¼Ç µ¥ÀÌÅͰ¡ ³²¾ÆÀÖÀ¸¸é PHP´Â ´ç½ÅÀÇ Àǵµ¿Í´Â ´Þ¸® »õ·Î¿î

¼¼¼ÇÀ» ½ÃÀÛÇÏ´Â ´ë½Å ÀÌÀüÀÇ ¼¼¼ÇÀ» ȸº¹½Ãŵ´Ï´Ù,

ÀÌ °æ¿ì gc_probabilityÀÇ µðÆúÆ® °ªÀÎ 0º¸´Ù´Â 10¿¡¼­ 20Á¤µµÀÇ °ªÀÌ Àû´çÇÕ´Ï´Ù.

 

     Tips

     ¿Ö PHP°¡ Á¤ÇØÁø ½Ã°£¸¶´Ù »èÁ¦¸¦ ÇÏ´Â ´ë½Å ¾ðÁ¦ garbage collectionÀÌ ¹ß»ýÇÒÁö¸¦ °áÁ¤ÇÏ´Â È®·ü(gc_probability)À» »ç¿ëÀÚ·Î

     ÇÏ¿©±Ý ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´ÂÁö ±Ã±ÝÇØ ÇϽÇÁöµµ ¸ð¸¨´Ï´Ù.

     ¸¸¾à PHP°¡ Ä«¿îÆ®¸¦ ÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù¸é ¼­¹ö´Â ¿­·ÁÀÖ´Â ¼¼¼ÇÀÇ ¼ýÀÚ¸¦ ÃßÀûÇÒ Çʿ䰡 »ý±é´Ï´Ù.

     È®·ü ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀº ¼­¹ö°¡ û¼Ò¸¦ À§ÇÑ Ä«¿îÅ͸¦ ÀúÀåÇÒ Çʿ䰡 ¾ø´Ù´Â ÀǹÌÀÌ°í µû¶ó¼­ Á¤È®ÇÏ°í ºü¸¥ ½ÇÇàÀÌ ÀÌ·ïÁø´Ù´Â

     ÀǹÌÀÔ´Ï´Ù.

 

 

Storage Modules

¼¼¼Ç µ¥ÀÌÅ͸¦ Àаí ÀúÀåÇϱâ À§Çؼ­ PHP´Â storage moduleÀ» »ç¿ëÇÕ´Ï´Ù. ÇöÀç »ç¿ë °¡´ÉÇÑ storage moduleÀº ¼¼°¡Áö ÀÔ´Ï´Ù.

  Files.

   ±âº»ÀûÀ¸·Î PHP´Â ¼¼¼Ç µ¥ÀÌÅ͸¦ µð½ºÅ©¿¡ ÀúÀåÇϱâ À§ÇØ È­ÀÏ ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù. /tmp¿¡ ¼¼¼ÇIDÀÇ À̸§À» µý ÅØ½ºÆ® ÆÄÀÏÀ»

   ¸¸µé°Ô µÇÁö¸¸ ÀÌ È­ÀϵéÀ» Á÷Á¢ÀûÀ¸·Î Á¢±ÙÇÒ ÇÊ¿ä´Â ¾øÀ» °ÍÀÔ´Ï´Ù. ¼¼¼Ç Ä«¿îÅÍÀÇ ¿¹Á¦¿¡¼­´Â º¯¼ö°¡ serializeµÈ ´ÙÀ½ÀÇ ÇüÅÂó·³

   º¸¿©Áú °ÍÀÔ´Ï´Ù.: counter|i:4;

  mm.

   ´õ ³ôÀº ÆÛÆ÷¸Õ½º¸¦ ¿øÇÑ´Ù¸é, mm ¸ðµâÀº ÀûÀýÇÑ ´ë¾ÈÀÔ´Ï´Ù. À̰ÍÀº °øÀ¯ ¸Þ¸ð¸®¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇϹǷΠÇϵå¿þ¾îÀÇ I/O ½Ã½ºÅÛ¿¡

   ÀÇÇØ Á¦¾àÀ» ¹ÞÁö ¾Ê½À´Ï´Ù.

  User.

   session_set_save_handler()·Î Á¤ÀÇµÈ user-levelÀÇ È¸¼ö(callback)ÇÔ¼ö¸¦ ÀνÄÇϱâ À§ÇØ ³»ºÎÀûÀ¸·Î »ç¿ëµË´Ï´Ù.

   Á¤¸» °­·ÂÇÑ ÈûÀº »ç¿ëÀÚÀÇ È¸¼ö(callback)¸¦ ÀúÀå ¸ðµâ·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ±â´É¿¡ ÀÖ½À´Ï´Ù.

 

±âÁØÈ­ µÈ PHP API¿¡ ÀÇÁ¸ÇÒ ¼ö ÀÖÀ¸¸é¼­ µ¿½Ã¿¡ ¼¼¼ÇÀ» ´Ù·ç±â À§ÇÑ ÇÔ¼ö¸¦ Á÷Á¢ ¸¸µé ¼ö Àֱ⠶§¹®¿¡, ¾îµð¿¡³ª ¾î¶»°Ôµç

- MySQL°°Àº µ¥ÀÌÅͺ£À̽º³ª XML È­ÀÏ, ¿ø°Ý FTP ¼­¹ö µî- ¼¼¼ÇÀ» ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù. (FTP ¼­¹ö´Â Á» ´Ù¸£Áö¸¸, ÀÌÇØÇϽðÚÁö¿ä.).

session_set_save_handler() ÇÔ¼ö´Â callback ÇÔ¼öÀÎ 6°³ÀÇ ¹®ÀÚ¿­À» Àμö·Î ¹Þ½À´Ï´Ù.

 

ÀÌ ÇÔ¼öÀÇ ¹®¹ýÀº ¾Æ·¡¿Í °°½À´Ï´Ù.

void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc);

 

     Tip

    Àμö Çϳª¸¦ ³²°ÜµÎ·Á¸é ºñ¾îÀÖ´Â ¹®ÀÚ¿­("")À» session_set_save_handler()¿¡ Àü´ÞÇϽʽÿÀ.

  

ÇÔ¼öµéÀº ¾Æ·¡¿Í °°ÀÌ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

  bool open (string save_path, string sess_name);

   ÀÌ ÇÔ¼ö´Â ¼¼¼ÇÀÇ ÃʱâÈ­¶§ ½ÇÇàµË´Ï´Ù. ÇÔ¼ö¸¦ ÁغñÇÏ°í º¯¼ö¸¦ ÃʱâÈ­ ÇÏ´Â µî¿¡ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

   ÀÌ ÇÔ¼ö´Â µÎ°³ÀÇ ¹®ÀÚ¿­À» Àμö·Î °®½À´Ï´Ù. ù¹øÂ° Àμö´Â ¼¼¼ÇÀÌ ÀúÀåµÇ´Â °æ·ÎÀÔ´Ï´Ù.

   ÀÌ º¯¼ö´Â php,ini¿¡ ÁöÁ¤µÇ°Å³ª session_save_path() ÇÔ¼ö¸¦ ÅëÇØ ÁöÁ¤µÉ ¼ö ÀÖ½À´Ï´Ù.

   ÀÌ º¯¼ö¸¦ joker·Î »ç¿ëÇϰųª (?) ¸ðµâ¿¡ ƯȭµÈ ¼³Á¤À» À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

   µÎ¹øÂ° Àμö´Â µðÆúÆ®·Î PHPSESSID °ªÀ» °®´Â ¼¼¼ÇÀÇ À̸§ÀÔ´Ï´Ù. ¼º°øÇϸé true¸¦, ¿¡·¯°¡ ¹ß»ýÇϸé false¸¦ ¸®ÅÏÇÕ´Ï´Ù.

 

  bool close ();

   ÀÌ ÇÔ¼ö´Â ¼¼¼ÇÀ» ´ÝÀ»¶§ ½ÇÇàµË´Ï´Ù. ¸Þ¸ð¸®¸¦ ÇØÁö½ÃŰ°Å³ª º¯¼ö¸¦ »èÁ¦Çϱâ À§ÇÏ¿© »ç¿ëÇϽʽÿÀ.

   ¾Æ¹« Àμö¸¦ ¹ÞÁö ¾ÊÀ¸¸ç ¼º°øÇϸé true¸¦, ¿¡·¯°¡ ¹ß»ýÇϸé false¸¦ ¸®ÅÏÇÕ´Ï´Ù.

 

  mixed read (string sess_id, );

   ÀÌ Áß¿äÇÑ ÇÔ¼ö´Â ¼¼¼ÇÀÌ ½ÃÀÛÇÒ¶§¸¶´Ù È£ÃâµË´Ï´Ù.

   ÀÌ ÇÔ¼ö´Â ¼¼¼ÇID¿¡ ÀÇÇØ ½Äº°µÇ´Â ¼¼¼Ç µ¥ÀÌÅ͸¦ Àаí serializeµÈ ¹®ÀÚ¿­À» ¸®ÅÏÇÕ´Ï´Ù.

   ÀÌ ID¿¡ ´ëÇÑ ¼¼¼ÇÀÌ ¾øÀ¸¸é ºñ¾îÀÖ´Â ¹®ÀÚ¿­ÀÎ ""°¡ ¸®ÅϵǸç, ¿¡·¯°¡ ¹ß»ýÇϸé false¸¦ ¸®ÅÏÇÕ´Ï´Ù.

 

  bool write (string sess_id, , string value);

   ¼¼¼ÇÀÌ ÀúÀåµÉ Çʿ䰡 ÀÖÀ»¶§, ÀÌ ÇÔ¼ö°¡ ¹ß»ýµË´Ï´Ù.

   Ã¹¹øÂ° Àμö´Â sess_id¸¦ Æ÷ÇÔÇÏ´Â ¹®ÀÚ¿­À̰í, µÎ¹øÂ° Àμö´Â ¼¼¼Ç º¯¼öÀÇ serializeµÈ ÇüÅÂÀÔ´Ï´Ù.

   ÀÌ ÇÔ¼ö´Â ¼º°øÇϸé true¸¦, ¿¡·¯°¡ ¹ß»ýÇϸé false¸¦ ¸®ÅÏÇÕ´Ï´Ù.

 

  bool destroy (string sess_id, );

   °³¹ßÀÚ°¡ session_destroy()¸¦ È£ÃâÇϸé ÀÌ ÇÔ¼ö°¡ ½ÇÇàµË´Ï´Ù. ÀÌ ÇÔ¼ö´Â ¼¼¼ÇÀÇ sess_id¿Í °ü·ÃµÈ ¸ðµç µ¥ÀÌÅ͸¦ »èÁ¦Çϰí

   ¼º°øÇϸé true¸¦, ¿¡·¯°¡ ¹ß»ýÇϸé false¸¦ ¸®ÅÏÇÕ´Ï´Ù.

 

  bool gc (int max_lifetime, );

   ÀÌ ÇÔ¼ö´Â ¼¼¼ÇÀÌ gc_probability¿¡ ÁöÁ¤µÈ È®·ü·Î ½ÃÀÛµÉ ¶§ È£ÃâµË´Ï´Ù.

   ÀÌ ÇÔ¼ö´Â garbage collection¿¡ ÀÌ¿ëµË´Ï´Ù.; Áï, gc_maxlifetime¿¡ ÇØ´çÇÏ´Â ±â°£(´ÜÀ§:ÃÊ) ÀÌ»ó °»½ÅµÇÁö ¾ÊÀº ¼¼¼ÇÀ»

   »èÁ¦ÇÏ°Ô µË´Ï´Ù.

   ÀÌ ÇÔ¼ö´Â ¼º°øÇϸé true¸¦, ¿¡·¯°¡ ¹ß»ýÇϸé false¸¦ ¸®ÅÏÇÕ´Ï´Ù.

 

¸¸¾à ÀÚ½ÅÀÇ ÀúÀå ¸ðµâÀ» ÁöÁ¤ÇÏ°í ½Í´Ù¸é (¿¹¸¦ µéÀÚ¸é MySQL µ¥ÀÌÅͺ£À̽º¿¡ ¼¼¼Ç µ¥ÀÌÅ͸¦ ÀúÀåÇϰíÀÚ ÇÑ´Ù¸é) ÀÌ·¯ÇÑ ÇÔ¼öµéÀ»

PHP·Î ±¸ÇöÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.

±× ÇÔ¼öµéÀÇ prototypeÀº ¾Æ·¡ÀÇ ¿¹¿Í ºñ½ÁÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù.

 

function sess_open($save_path, $sess_name)

{

}

 

function sess_read($sess_id)

{

}

 

function sess_write($sess_id, $val)

{

}

 

function sess_destroy($sess_id)

{

}

 

function sess_gc($max_lifetime)

{

}

 

ÀÌ·¯ÇÑ callback ÇÔ¼öµéÀ» µî·ÏÇϱâ À§Çؼ­´Â session_set_save_handler(): ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.

session_set_save_handler("sess_open", "", "sess_read", "sess_write", "sess_destroy", "sess_gc");

 

 

Session ID Propagation (¼¼¼Ç ID Àü´Þ)

PHP4 ¼¼¼ÇÀº ¼¼¼ÇID Àü´ÞÀ» À§ÇØ ¾Æ·¡ÀÇ ¹æ¹ýµéÀ» Áö¿øÇÕ´Ï´Ù.

   ÄíŰ (µðÆúÆ®)

   GET/POST

   Á÷Á¢ ÀÔ·ÂÇϰųª ÀÚµ¿À¸·Î ÀçÁöÁ¤µÈ URL¿¡ °¨ÃçÁ®¼­

 

ÄíŰ´Â ÆäÀÌÁöµé°£¿¡ ¼¼¼Ç ID¸¦ ÁÖ°í¹Þ´Â ±âº»ÀûÀÎ ¹æ¹ýÀÔ´Ï´Ù.

Äí۰¡ Àß µÈ´Ù¸é ´Ù¸¥ ¼³Á¤¿¡ ´ëÇØ °ÆÁ¤ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.

´Ù¸¥ ÀϹÝÀûÀÎ ¹æ¹ýÀº GET/POST·Î ID¸¦ Àü´ÞÇÏ´Â °ÍÀÔ´Ï´Ù.

ÀÌ °æ¿ì URLÀº script.php3?<session-name>=<session-id> ¿Í ºñ½ÁÇÑ ÇüŰ¡ µÉ °ÍÀÔ´Ï´Ù.

global constant SID¸¦ ÀÌ¿ëÇØ ÀÌ·¯ÇÑ URLÀ» ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

 

printf('<a href="script.php?%s">Link</a>', SID);

 

ÀÚµ¿À¸·Î URLÀ» ÀçÁ¤ÀÇ ÇÏ´Â °ÍÀº PHP4ÀÇ ¸ÚÁø »õ ±â´É Áß ÇϳªÀ̸ç, ¼¼¼Ç ID¸¦ ÆäÀÌÁö ¾ÈÀÇ ¸µÅ©¿¡ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù.

À̰ÍÀ» °¡´ÉÇÏ°Ô ÇÏ·Á¸é PHP¸¦ --enable-trans-id ¿É¼ÇÀ¸·Î ¼³Á¤Çϰí Àç ÄÄÆÄÀÏ ÇØ¾ß ÇÕ´Ï´Ù.

±×·¯¸é PHP·Î ÇØ¼®µÇ´Â ÆäÀÌÁö ³»ÀÇ ÆûÀÇ ¼¼¼ÇID´Â ¸ðµç °ü·Ã ¸µÅ©¿¡ Ãß°¡°¡ µÉ °ÍÀÔ´Ï´Ù.

À̰ÍÀº °£ÆíÇÑ ±â´ÉÀÌÁö¸¸ ÆÛÆ÷¸Õ½º°¡ ³ôÀº »çÀÌÆ®¿¡¼­´Â Á¶½É½º·´°Ô ¾²¿©Á®¾ß ÇÕ´Ï´Ù.

PHP´Â °¢°¢ÀÇ °³º°ÀûÀÎ ÆäÀÌÁöµéÀ» ã¾Æ¼­ °ü·Ã ¸µÅ©¸¦ °¡Á³´ÂÁö È®ÀÎÇϰí ID¸¦ ¸µÅ©¿¡ ´õÇØ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù.

¹°·Ð ÆÛÆ÷¸Õ½ºÀÇ ÀúÇϸ¦ °¡Áö°í ¿À°ÚÁö¿ä.

¹Ý´ë·Î ÄíŰ´Â Çѹø¸¸ ¼¼ÆÃµÇ¹Ç·Î URLÀÇ ÀçÁöÁ¤¿¡ µû¸¥ ¿À¹öÇìµå¸¦ ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

 

Example Code

¾Æ·¡´Â ÁÖ¼®ÀÌ ´Þ¸° »ùÇà ÄÚµåÀÔ´Ï´Ù.

ÀαâÀÖ´Â Çà¸Ç °ÔÀÓ(¿ªÀÚ ÁÖ : ÁÖ¾îÁø ´Ü¾îÀÇ ½ºÆç¸µÀ» ¸ÂÃß´Â °ÔÀÓ)Àº ¾î¶»°Ô persistent variablesÀ» »ç¿ëÇÏ´Â Áö¸¦ º¸¿©ÁÖ´Â ÁÁÀº

¹æ¹ýÀÔ´Ï´Ù.

ÀÌ °ÔÀÓ¿¡¼­ ÄÄÇ»ÅÍ´Â ·£´ýÇÏ°Ô 5±ÛÀÚÂ¥¸®ÀÇ ´Ü¾î¸¦ °í¸£°í, °ÔÀ̸Ӵ ¾î¶² ±ÛÀÚ°¡ ±× ´Ü¾î¾È¿¡ Æ÷ÇԵǴÂÁö ¸ÂÃç¾ß ÇÕ´Ï´Ù.

»ç¿ëÀÚ´Â 6¹øÀÇ ½Ãµµ¸¦ ÇÒ ¼ö ÀÖ°í ¸ÂÃßÁö ¸øÇÏ¸é ±³¼öÇü¿¡ Ã³ÇØÁý´Ï´Ù.

¿ì¸®´Â ÈçÇÑ ¿µ¾îÀÇ ¿©ÀÚÀ̸§ µ¥ÀÌÅͺ£À̽º¸¦ °ñ¶úÁö¸¸, ´ç½ÅÀº ¿øÇÏ´Â ¾Æ¹« ´Ü¾î³ª »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

´Ü¼øÈ÷ words.txtÈ­Àϸ¸ ¹Ù²Ù½Ã¸é µË´Ï´Ù. ´Ü ÇϳªÀÇ Á¦¾àÁ¶°ÇÀº °¢ ´Ü¾î´Â ÇÑ ÁÙ¿¡ À§Ä¡ÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

¹°·Ð ÀÌ °ÔÀÓÀº »óÅ Á¤º¸¸¦ À¯ÁöÇÏÁö ¾Ê°í´Â ÀÌ·ïÁú ¼ö ¾ø½À´Ï´Ù.

°ÔÀ̸Ӵ ¾ðÁ¦³ª 5¹øÀÇ ±âȸ°¡ ³²°ÜÁö°Ô µÇ¸ç, Çѹø¿¡ ´Ü¾î ÀüºÎ¸¦ ¸ÂÃßÁö ¸øÇϸé Àý´ë ÀÌ±æ ¼ö ¾ø°í, ´ç¿¬È÷ Àç¹Ì°¡ ¾ø°ÚÁö¿ä.

Àá½Ã ÀÌ °ÔÀÓÀÇ ·ÎÁ÷¿¡ ´ëÇØ »ý°¢Çغ¸½Ã¸é ¸Å¹ø ¿äûµÇ´Â ³»¿ë¿¡ ´ëÇØ ±â¾ïµÇ¾îÁ®¾ß ÇÒ º¯¼ö 3°³¸¦ ã¾Æ³»½Ç ¼ö ÀÖÀ¸½Ç °ÍÀÔ´Ï´Ù.

   °ÔÀ̸Ӱ¡ ¸ÂÃç¾ß ÇÒ ·£´ýÇÑ ´Ü¾î

   »ç¿ëÀÚ°¡ ÀÌ¹Ì ÃßÃøÇØ ³½ ±ÛÀÚµé

   »ç¿ëÀÚ°¡ ½ÃµµÇØ º» ȸ¼ö

½ÃµµÇÑ È¸¼ö´Â ¾à°£ÀÇ Æ®¸¯À¸·Î °è»êÀÌ °¡´ÉÇÏÁö¸¸, ±×·¯³ª ÀÌ ¿¹Á¦¿¡¼­´Â ¸í¹éÇÏ°Ô Çϱâ À§ÇØ º°µµ·Î ÀúÀåÀ» Çß½À´Ï´Ù.

 

¿¹Á¦´Â ¼¼¼Ç ID¿Í ÄíŰÀÇ ±âº» Àü´Þ¹æ¹ýÀ» »ç¿ëÇÏ¿´À¸¹Ç·Î, ¼¼¼Ç ¶óÀ̺귯¸®¸¦ »ç¿ëÇϴµ¥¿¡ ¾î¶°ÇÑ ±â±³µµ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.

¿¹Á¦´Â ¾Æ·¡ÀÇ ÇÁ·Î±×·¥ ·ÎÁ÷À» µû¶ó ÀÛ¼ºµÇ¾ú½À´Ï´Ù.

¼¼°³ÀÇ ¼¼¼Ç º¯¼ö°¡ µî·ÏµÇ¾ú½À´Ï´Ù.

½ºÅ©¸³Æ®´Â formÀÌ Post¿¡ ÀÇÇØ ¹ß»ýµÇ¾ú´ÂÁö, Áï »ç¿ëÀÚ°¡ ¼±ÅÃÀ» Çß´ÂÁö¸¦ È®ÀÎÇÕ´Ï´Ù. ÀÌ °æ¿ì, ½ºÅ©¸³Æ®´Â ÀÔ·ÂµÈ ³»¿ëÀ» Àü´ÞÇϰí,

°ÔÀÓ »óÅÂ(½ÂÆÐ ¿©ºÎ, ÃßÁ¤ÀÇ Á¤È®/ºÎÁ¤È® ¿©ºÎ)¸¦ °»½ÅÇϸç ÀûÀýÇÑ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÕ´Ï´Ù.

±×·¸Áö ¾ÊÀ¸¸é »õ °ÔÀÓÀÌ ½ÃÀÛµÇ°í ·£´ýÇÑ ´Ü¾î°¡ words.txt È­ÀϷκÎÅÍ ¼±Åõ˴ϴÙ.

ÃßÃøµÈ ´Ü¾î¿¡¼­ ¾ÆÁ÷ ÃßÃøÇÏÁö ¾ÊÀº ±ÛÀÚ¸¦ °¨Ãß°í ÀÖ´Â ¹®ÀÚ¿­ÀÌ ¸¸µé¾îÁö°í È­¸é¿¡ Ãâ·ÂµË´Ï´Ù.

³ª¸ÓÁö ÆäÀÌÁö°¡ ±×·ÁÁý´Ï´Ù.

¸ðµç HTML Ãâ·Â¹°Àº º°°³ÀÇ ÅÛÇø´ Ŭ·¡½º¿¡ ÀÇÇØ Á¶Á¤µË´Ï´Ù. À̰ÍÀº ÇÁ·ÎÆä¼Å³Î À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ÀÚÁÖ ÀÌ¿ëµÇ´Â ÄÚµå¿Í

·¹À̾ƿôÀÇ ºÐ¸®¸¦ °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. ±×·¯³ª ÀÌ ³»¿ë¿¡ ´ëÇØ¼­´Â ´Ù¸¥ tutorial¿¡¼­ ´Ù·çµµ·Ï ÇÕ´Ï´Ù.

ÀÌ ÄÚµå´Â °£´ÜÇÏÁö¸¸ ¶§¹®¿¡ ÀÌÇØÇϱ⠽¬¿ö ¾î¶»°Ô, ±×¸®°í ¾î¶² ¸ñÀûÀ¸·Î ¼¼¼Ç ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ°Ô

ÇÕ´Ï´Ù.

¶ÇÇÑ °ÔÀ̸ÓÀÇ ÃÖ°í Á¡¼ö¸¦ µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÏ´Â µîÀÇ ¾îÇø®ÄÉÀ̼ÇÀÇ È®Àå±îÁöµµ °¡´ÉÇÕ´Ï´Ù.

¸¸¾à ÀÌ °ÔÀÓÀ¸·Î ±×·± ±Ù»çÇÑ ÀÏÀ» Çß´Ù¸é ¾Ë·ÁÁּż­ ¿ì¸® À¥ »çÀÌÆ®¿¡°Ô ´ç½ÅÀÇ ¹öÀüÀ» ½ÇÀ» ¼ö ÀÖµµ·Ï ÇØÁֽʽÿÀ.

 

 

NOTE :  ¾Õ¿¡ "//"·Î Ç¥½ÃµÈ ºÎºÐÀº ÁÖ¼®ÀÔ´Ï´Ù.

 

require("EasyTemplate.inc.php3");

define("HANG_MAX_TRIES", 6);

 

$guess = strtolower($guess);

 

function hang_get_random_line($file)

{

// È­ÀÏÀ» ¿­±âÀ§ÇØ ½Ãµµ

if(!file_exists($file) || !($fp = fopen($file, "r")))

{

die("Could not open file \"$file\" fo reading.");

}

 

// È­ÀÏÀÇ Å©±â¸¦ °¡Á®¿Â´Ù

$size = filesize($file);

 

// ·£´ýÇÔ¼ö¸¦ ÃʱâÈ­ Çϰí È­ÀÏ Å©±âÀÇ ¹üÀ§ ¾ÈÇØ¼­ ·£´ýÇÑ °ªÀ» ¾ò´Â´Ù.

srand((double)microtime()*1000000);

$randval = rand(0, $size);

 

// È­ÀÏ ³»¿¡¼­ ·£´ýÇÑ Æ÷Áö¼ÇÀ» ã´Â´Ù

fseek($fp, $randval);

 

// ¸î¹øÂ° ¿­ÀÎÁö ±¸ÇÑ´Ù.

$line = trim(fgets($fp, 1024));

$line = trim(fgets($fp, 1024));

 

// È­ÀÏÀ» ´Ý´Â´Ù.

fclose($fp);

 

// ºñ¾îÀÖ´Â ¿­À̸é Àç½Ãµµ

if(empty($line))

{

$line = hang_get_random_line($file);

}

 

// ·£´ýÇÑ ¿­À» ¸®ÅÏ

return($line);

}

 

// ¼¼¼ÇÀÇ ÃʱâÈ­

session_start();

 

// º¯¼ö¸¦ µî·ÏÇÑ´Ù.

session_register("num_of_tries");

session_register("guessed_chars");

session_register("word");

 

if($REQUEST_METHOD == "POST" && !empty($word) && !empty($guess))

{

$guessed_chars[] = $guess;

if(!strstr($word, $guess))

{

// ±ÛÀÚ°¡ ´Ü¾î ¾È¿¡ ¾øÀ»¶§

$num_of_tries++;

$message = "Wrong guess.";

}

else

{

$message = "Correct guess!";

}

 

}

else

{

$word = strtolower(hang_get_random_line("words.txt"));

$message = "Welcome to Hangman!";

$num_of_tries = 1;

$guessed_chars = array();

}

 

 

$guessed_word = $word;

 

// ÃßÃøÇØ¾ß ÇÏ´Â ´Ü¾î¸¦ ¸¸µé¾î³½´Ù.(¾ÆÁ÷ ÃßÃøµÇ¾îÁöÁö ¾ÊÀº ±ÛÀÚ ´ë½Å "_"¸¦ ³Ö´Â´Ù)

for($i=0; $i<strlen($word); $i++)

{

if(!strstr(implode("", $guessed_chars), $word[$i]))

{

$guessed_word = str_replace($word[$i], "_ ", $guessed_word);

}

}

 

$button = "Go";

 

// °ÔÀ̸Ӱ¡ À̰å´ÂÁö Á³´ÂÁö È®ÀÎ

if($guessed_word == $word || $word == $guess)

{

$message = "Correct guess - you've won!";

session_destroy();

$button = "New Game";

$num_of_tries = 1;

}

elseif($num_of_tries == HANG_MAX_TRIES || strlen($guess) > 1)

{

$message = "You've lost. The word was \"$word\".";

session_destroy();

$button = "Try Again";

$num_of_tries = HANG_MAX_TRIES;

}

 

// »õ·Î¿î template instance¸¦ ¸¸µç´Ù

$tpl = new EasyTemplate("template.inc.html");

 

// templateº¯¼ö°ª ÁöÁ¤

$tpl->assign("ACTION", basename($PHP_SELF));

$tpl->assign("NUM_OF_TRIES", $num_of_tries);

$tpl->assign("BUTTON", $button);

$tpl->assign("MESSAGE", $message);

$tpl->assign("WORD", $guessed_word);

$tpl->assign("GUESSED_CHARS", @implode("", $guessed_chars));

 

// templateÀ» Ãâ·Â

$tpl->easy_print();

 

 

 

Tobias Ratschiller is a New Media Consultant in Italy, specializing in the creation of large scale dynamic websites.

He has provided consulting and implementation work for some of the world's largest websites and has contributed to several PHP titles.

Together with Till Gerken, he's currently writing a book titled "Advanced Web Application Development with PHP", which will be published in May 2000 by New Riders.

Apart from that, he teaches at seminars about usability, user interface design and content management systems.

Tobias runs http://phpwizard.net/

 

ÆíÁýÀÚ : ¹ÚÈñ¼ö(peterpan_at_wowlinux.com)