25.3. °íµµÀÇ »ç¿ë¹ý

±âº»ÀûÀÎ »ç¿ë¹ýÀÇ ¿¹·Î Zend Framework ÀÇ ¼¼¼ÇÀ» ¿ÏÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, º¸´Ù ÁÁÀº ¹æ¹ýµµ ÀÖ½À´Ï´Ù. Zend_Auth ÀÇ »ùÇà (À»)¸¦ º¾½Ã´Ù.À̰ÍÀº, µðÆúÆ®·Î Zend_Session_Namespace (À»)¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î½á, ÀÎÁõ ÅäÅ«À» Áö¼ÓÀû À¸·Î À¯ÁöÇϰí ÀÖ´Â ¿¹ÀÔ´Ï´Ù. ÀÌ ¿¹´Â,Zend_Session_Namespace ¹× Zend_Auth (À»)¸¦ Àçºü¸£°í °£´ÜÇÏ°Ô ÅëÇÕÇϱâ À§ÇÑ ÇϳªÀÇ ¹æ¹ýÀ» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù.

25.3.1. ¼¼¼ÇÀÇ °³½Ã

¸ðµç ¸®Äù½ºÆ®·Î Zend Framework ÀÇ ¼¼¼ÇÀ» »ç¿ëÇØ ¼¼¼Ç °ü¸®ÇÏ°í ½ÍÀº °æ¿ì´Â, ±âµ¿ ÆÄÀÏ·Î ¼¼¼ÇÀ» °³½ÃÇÕ´Ï´Ù.

·Ê 25.6. ±Û·Î¹ú ¼¼¼ÇÀÇ °³½Ã


<?php
...
require_once 
'Zend/Session.php';
Zend_Session::start();
...
?>

±âµ¿ ÆÄÀÏ·Î ¼¼¼ÇÀ» °³½ÃÇÒ ¶§ , Çì´õ°¡ ºê¶ó¿ìÀú¿¡ ¼Û½ÅµÇ±â Àü¿¡ È®½ÇÈ÷ ¼¼¼ÇÀÌ ½ÃÀ۵ǵµ·Ï(µíÀÌ) ÇÕ´Ï´Ù. ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ¿¹¿Ü°¡ ¹ß»ýÇØ ¹ö·Á, ¾Æ¸¶ À¯Àú°¡ º¸´Â ÆäÀÌÁö´Â ¹«³ÊÁ® ¹ö¸®°ÚÁö¿ä. ´Ù¾çÇÑ °íµµÀÇ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é , ¿ì¼± Zend_Session::start() ÇÏÁö¸¸ ÇÊ¿äÇÕ´Ï´Ù ( °íµµÀÇ ±â´ÉÀÇ »ó¼¼ÇÑ °Í¿¡ ´ëÇÏ¿©´Â ´ÙÀ½¿¡ ¼³¸íÇÕ´Ï´Ù) .

Zend_Session (À»)¸¦ »ç¿ëÇØ ¼¼¼ÇÀ» °³½ÃÇÏ´Â ¹æ¹ýÀº 4ÅëÀÖ½À´Ï´Ù¸¸, ±× Áß µÑÀº À߸øµÈ ¹æ¹ýÀÔ´Ï´Ù.

  • 1. ½Ç¼ö: PHP ÀÇ session.auto_start (http://www.php.net/manual/ja/ref.session.php#ini.session.auto-start) (À»)¸¦,php.ini (ÀÌ)³ª .htaccess ±×¸®°í ¼³Á¤ ÇØ¼­´Â ¾ÈµË´Ï´Ù. ¸¸¾à mod_php ( (ÀÌ)³ª ±×°Í°ú µ¿µîÀÇ °Í) (À»)¸¦ »ç¿ëÇϰí ÀÖ¾î, php.ini ±×¸®°í ÀÌ ¼³Á¤ÀÌ À¯È¿ÇÏ°Ô µÇ¾î ÀÖ´Ù, ÇÑÆí ±×°ÍÀ» ¹«È¿·Î ÇÒ ¼ö ÇÒ ¼ö ¾ø´Ù ±×·¸´Ù°í ÇÏ´Â °æ¿ì´Â,.htaccess ÆÄÀÏ ( Åë»óÀº HTML ÀÇ ¹®¼­ ·çÆ®¿¡ ÀÖ½À´Ï´Ù) ¿¡ php_value session.auto_start 0 (À»)¸¦ Ãß°¡ÇÕ´Ï´Ù.

    v
  • 2. ½Ç¼ö: PHP ÀÇ session_start() ÇÔ¼ö¸¦ Á÷Á¢ »ç¿ë ÇØ¼­´Â ¾ÈµË´Ï´Ù. session_start() (À»)¸¦ Á÷Á¢ »ç¿ëÇÑ ´ÙÀ½¿¡ Zend_Session_Namespace (À»)¸¦ »ç¿ëÇϸé, Zend_Session::start() ÇÏÁö¸¸ ¿¹¿Ü ("session has already been started") (À»)¸¦ ½½·Î¿ì ÇÕ´Ï´Ù.Zend_Session_Namespace (À»)¸¦ »ç¿ëÇÒ±î ¸í½ÃÀûÀ¸·Î Zend_Session::start() ±×¸®°í °³½ÃÇÑ ´ÙÀ½¿¡ session_start() (À»)¸¦ ÄÝ Çϸé,E_NOTICE ÇÏÁö¸¸ ¹ß»ýÇØ, ±× ÄÝÀº ¹«½ÃµË´Ï´Ù.

  • 3. Á¤´ä: Zend_Session::start() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù. ¸ðµç ¸®Äù½ºÆ®·Î ¼¼¼ÇÀ» »ç¿ëÇÏ°í ½ÍÀº °æ¿ì´Â, ÀÌ ÇÔ¼ö ÄÝÀ» ZF ÀÇ ±âµ¿ ÄÚµåÀÇ ÃÖÃÊ ÂÊÀ¸·Î ¹«Á¶°Ç ±â¼úÇÕ´Ï´Ù. ¼¼¼Ç¿¡´Â ¾î´À Á¤µµÀÇ ¿À¹öÇìµå°¡ ÀÖ½À´Ï´Ù. ¼¼¼ÇÀ» »ç¿ëÇÏ°í ½ÍÀº ¸®Äù½ºÆ®¿Í ±×·¸Áö ¾ÊÀº ¸®Äù½ºÆ®°¡ ÀÖ´Â °æ¿ì´Â,

    • ±âµ¿ Äڵ峻¿¡¼­, ¹«Á¶°Ç ¿É¼Ç strict (À»)¸¦ true (À¸)·Î ÇÕ´Ï´Ù ( Zend_Session::setOptions() (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ ) .

    • ¼¼¼ÇÀ» ÇÊ¿ä·Î ÇÏ´Â ¸®Äù½ºÆ®³»¿¡¼­, ÃÖÃÊ·Î new Zend_Session_Namespace() (À»)¸¦ ÄÝ Çϱâ Àü¿¡,Zend_Session::start() (À»)¸¦ ÄÝ ÇÕ´Ï´Ù.

    • Åë»ó ´ë·Î, Çʿ信 µû¶ó¼­ new Zend_Session_Namespace() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.»çÀü¿¡ Zend_Session::start() ÇÏÁö¸¸ ÄÝ µÇ°í ÀÖ´Â °ÍÀ» È®ÀÎÇØ µÓ½Ã´Ù.

    strict ¿É¼Ç¿¡ ÀÇÇØ,new Zend_Session_Namespace() ÇÏÁö¸¸ ÀÚµ¿ÀûÀ¸·Î Zend_Session::start() ±×¸®°í ¼¼¼ÇÀ» °³½ÃÇÏ´Â °ÍÀÌ ¾ø¾îÁý´Ï´Ù. µû¶ó¼­, ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé,ZF ¾îÇø®ÄÉÀ̼ÇÀÇ °³¹ßÀÚ°¡ ƯÁ¤ÀÇ ¸®Äù½ºÆ®¿¡´Â ¼¼¼ÇÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù°í ÇÏ´Â ¼³°è¸¦ ÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé, ¸í½ÃÀûÀ¸·Î Zend_Session::start() (À»)¸¦ ÄÝ Çϱâ Àü¿¡ Zend_Session_Namespace ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÏ·Á°í ÇßÀ» ¶§¿¡ ¿¹¿Ü°¡ ½½·Î¿ì µË´Ï´Ù. ZF ÀÇ ÄھƶóÀ̺ê¶ó¸®ÀÇ Äڵ忡¼­´Â ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏÁö ¸»¾Æ ÁÖ¼¼¿ä. ÀÌ·¯ÇÑ ¼³°è»óÀÇ °á´ÜÀ» À̱â´Â °ÍÀº, ¾îÇø®ÄÉÀ̼ÇÀÇ °³¹ßÀÚÀ̱⠶§¹®ÀÔ´Ï´Ù. °°ÀÌ" ¶óÀ̺귯¸®" ÀÇ °³¹ßÀÚµµ,Zend_Session::setOptions() ÀÇ »ç¿ëÀÌ À¯Àú¿¡°Ô ¾ó¸¶³ªÀÇ ¿µÇâÀ» Áٱ ÁÖÀÇÇϵµ·Ï ÇսôÙ. ÀÌ·¯ÇÑ ¿É¼ÇÀº ( ±Ù¿øÀÌ µÈ´Ù ext/session ÀÇ ¿É¼Ç°ú °°ÀÌ) , Àüü¿¡ ºÎÀÛ¿ëÀ» ¹ÌÄ¡±â ¶§¹®ÀÔ´Ï´Ù.

  • 4. Á¤´ä: Çʿ信 µû¶ó¼­ new Zend_Session_Namespace() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù. ¼¼¼ÇÀº,Zend_Session ÀÇ ³»ºÎ¿¡¼­ ÀÚµ¿ÀûÀ¸·Î °³½ÃµË´Ï´Ù. À̰ÍÀº °¡Àå ½ÉÇÃÇÑ »ç¿ë¹ýÀ¸·Î, ´ëºÎºÐÀÇ °æ¿ì¿¡ Àß µ¿ÀÛÇÕ´Ï´Ù. ±×·¯³ª, µðÆúÆ®ÀÎ ÄíŰ º£À̽ºÀÇ ¼¼¼Ç ( °­ÇÏ°Ô Ãßõ ÇÕ´Ï´Ù) (À»)¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì¿¡´Â,PHP ÇÏÁö¸¸ Ŭ¶óÀÌ¾ðÆ®¿¡ ¾î¶°ÇÑ Ãâ·Â (HTTP Çì´õ µî) (À»)¸¦ ÇÑ´Ù Àü¿¡ , È®½ÇÈ÷ ÃÖÃÊÀÇ new Zend_Session_Namespace() (À»)¸¦ ÄÝ ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. Ãâ·Â ¹öÆÛ¸µ (À»)¸¦ »ç¿ëÇϸé, ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ¾î ÆÛÆ÷¸Õ½ºµµ Çâ»ó½Ãų ¼ö ÀÖ°ÚÁö¿ä. ¿¹¸¦ µé¾î,php.ini ±×¸®°í "output_buffering = 65535" (À¸)·Î Çϸé, Ãâ·Â ¹öÆÛ¸µ¿ëÀÇ ¹öÆÛ°¡ 64K (ÀÌ)°¡ µË´Ï´Ù.

25.3.2. ¼¼¼Ç À̸§ °ø°£ÀÇ ¶ô

¼¼¼Ç À̸§ °ø°£À» Àá±×¾î, ±× ÀÌÈÄ ±× À̸§ °ø°£ÀÇ µ¥ÀÌÅÍ¿¡ ¼Õº¼ ¼ö ¾ø°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ÀÇ À̸§ °ø°£À» Àо Àü¿ëÀ¸·Î ÇÏ·Á¸é Zend_Session_Namespace ÀÇ lock() (À»)¸¦, ±×¸®°í µ¶ÇØ Àü¿ëÀÇ À̸§ °ø°£À» ÀÐ°í ¾²±âÇÒ ¼ö ÀÖµµ·Ï ÇÏ·Á¸é unLock() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.isLocked() (À»)¸¦ »ç¿ëÇϸé, ±× À̸§ °ø°£ÀÌ ¶ô µÇ°í ÀÖ´ÂÁö ¾î¶²Áö¸¦ Á¶»çÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¶ôÀº ÀϽÃÀûÀÎ °ÍÀ̸ç, ±× ¸®Äù½ºÆ®³»¿¡¼­¸¸ À¯È¿°¡ µË´Ï´Ù. À̸§ °ø°£À» Àá±×¾îµµ, ±× À̸§ °ø°£¿¡ º¸Á¸µÇ°í ÀÖ´Â ¿ÀºêÁ§Æ®ÀÇ ¼ÂŸ¸Þ¼Úµå¿¡´Â ¾î¶² ¿µÇâµµ ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù. ±×·¯³ª, À̸§ °ø°£ ÀÚüÀÇ ¼ÂŸ¸Þ¼Úµå´Â »ç¿ëÇÏÁö ¸øÇϰí, À̸§ °ø°£¿¡ Á÷Á¢ °Ý³³µÈ ¿ÀºêÁ§Æ®ÀÇ »èÁ¦³ª ġȯÀ» ÇÒ ¼ö ¾ø°Ô µË´Ï´Ù.°°ÀÌ Zend_Session_Namespace ÀÇ À̸§ °ø°£À» Àá±×¾ú´Ù°í ÇØµµ, °°Àº µ¥ÀÌÅ͸¦ Â´Â ½Éº¼ Å×À̺íÀÇ »ç¿ëÀ» ¼¼¿ï ¼ö ¾ø½À´Ï´Ù (PHP ÀÇ ·¹ÆÛ·±½º¿¡ ´ëÇÑ ¼³¸í µµ ÂüÁ¶ÇØ ÁֽʽÿÀ) .

·Ê 25.7. ¼¼¼Ç À̸§ °ø°£ÀÇ ¶ô


<?php
    
//  ÀÌ¿Í °°ÀÌ °¡Á¤ÇÕ´Ï´Ù
    
$userProfileNamespace = new Zend_Session_Namespace('userProfileNamespace');

    
//  ÀÌ ¼¼¼Ç¿¡ Àо Àü¿ë ¶ôÀ» °ÉĨ´Ï´Ù
    
$userProfileNamespace->lock();

    
//  µ¶ÇØ Àü¿ë ¶ôÀ» ÇØÁ¦ÇÕ´Ï´Ù
    
if ($userProfileNamespace->isLocked()) {
        
$userProfileNamespace->unLock();
    }
?>

À¥ÀÇ ¼¼°è¿¡¼­,MVC ÀÇ ¸ðµ¨À» ¾î¶»°Ô °ü¸®Çұ ´ëÇØ¼­´Â, ´Ù¾çÇÑ »ý°¢ÀÌ ÀÖ½À´Ï´Ù.±× ÁßÀÇ Çϳª¿¡, ºä·Î »ç¿ëÇÏ´Â ÇÁ·¹Á¨Å×ÀÌ¼Ç ¸ðµ¨À» ÀÛ¼ºÇÑ´Ù°í ÇÏ´Â °Íµµ ÀÖ½À´Ï´Ù. µµ¸ÞÀÎ ¸ðµ¨¾È¿¡ ÀÖ´Â ±âÁ¸ÀÇ µ¥ÀÌÅÍ·Î ÃæºÐÈ÷¶ó°í Çϱ⵵ ÇϰÚÁö¿ä. ºä Áß(¾È)¿¡¼­ ÀÌ·¯ÇÑ µ¥ÀÌÅÍ¿¡ ó¸® ³í¸®°¡ ½á ÀÔ¿¡ ¹° ¼ö ÀÖ¾î ¹ö¸±¸®°¡ ¾ø°Ô, ¼¼¼Ç À̸§ °ø°£À» Àá±×°í ³ª¼­ ±× ¡¸ÇÁ·¹Á¨Å×À̼ǡ¹ ¸ðµ¨À» ºä¿¡ °Ç³×ÁÖµµ·Ï ÇսôÙ.

·Ê 25.8. ºä¿¡ À־ÀÇ ¼¼¼ÇÀÇ ¶ô


<?php
class FooModule_View extends Zend_View
{
    public function 
show($name)
    {
        if (!isset(
$this->mySessionNamespace)) {
            
$this->mySessionNamespace Zend::registry('FooModule');
        }

        if (
$this->mySessionNamespace->isLocked()) {
            return 
parent::render($name);
        }

        
$this->mySessionNamespace->lock();
        
$return parent::render($name);
        
$this->mySessionNamespace->unLock();

        return 
$return;
    }
}
?>

25.3.3. ÄÜÆ®·Ñ·¯·ÎÀÇ ¼¼¼ÇÀÇ Ä¸½¶È­

À̸§ °ø°£À» »ç¿ëÇϸé, ÄÜÆ®·Ñ·¯¿¡ ÀÇÇÑ ¼¼¼Ç¿¡ÀÇ ¾×¼¼½º ½Ã¿¡ º¯¼öÀÇ ¿À¿°À» ¸·À» ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î,'Zend_Auth' ÄÜÆ®·Ñ·¯¿¡¼­´Â, ±× ¼¼¼Ç »óÅ µ¥ÀÌÅ͸¦ ´Ù¸¥ ÄÜÆ®·Ñ·¯¿Í´Â µû·Î °ü¸®ÇÏ°Ô µÇ°ÚÁö¿ä.

·Ê 25.9. ÄÜÆ®·Ñ·¯·ÎÀÇ À̸§ °ø°£ ´ÙÇØ ¼¼¼Ç¿¡ ÀÇÇÑ À¯È¿±â°£ÀÇ °ü¸®


<?php
require_once 'Zend/Session.php';
//  Áú¹®À» Ç¥½ÃÇÏ´Â ÄÜÆ®·Ñ·¯
$testSpace = new Zend_Session_Namespace('testSpace');
$testSpace->setExpirationSeconds(300"accept_answer"); // $test_session->setExpirationSeconds(300, "accept_answer"); //  ÀÌ º¯¼ö¿¡¸¸ À¯È¿±â°£À» ¼³Á¤ÇÕ´Ï´Ù
$testSpace->accept_answer true;


-- 

//  ȸ´äÀ» ó¸®ÇÏ´Â ÄÜÆ®·Ñ·¯
$testSpace = new Zend_Session_Namespace('testSpace');

if (
$testSpace->accept_answer === true) {
    
//  ½Ã°£³»
}
else {
    
//  ¸¶°¨ ½Ã°£
}
?>

25.3.4. À̸§ °ø°£³»¿¡¼­ÀÇ Zend_Session_Namespace ÀÇ ÀνºÅϽº¸¦ Çϳª¿¡ Á¦ÇÑÇÑ´Ù

¿©±â¼­ ¼³¸íÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏ´Â °Íº¸´Ùµµ, ¼¼¼ÇÀÇ ¶ô ( À§¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ) (À»)¸¦ »ç¿ëÇÏ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù.¿©±â¼­ ¼³¸íÇÏ´Â ±â´ÉÀº, °¢ À̸§ °ø°£¿¡ÀÇ ¾×¼¼½º°¡ ÇÊ¿äÇÑ ¸ðµç ÇÔ¼ö ¹× ¿ÀºêÁ§Æ®¿¡ Zend_Session_Namespace ÀÇ ÀνºÅϽº¸¦ °Ç³×ÁÖÁö ¾ÊÀ¸¸é ¾ÈµÇ¾î, °³¹ßÀÚ¿¡°ÔÀÇ ºÎ´ãÀÌ Ä¿Áý´Ï´Ù.

ƯÁ¤ÀÇ À̸§ °ø°£¿ëÀ¸·Î Zend_Session_Namespace ÀÇ ÃÖÃÊÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¶§¿¡, ±× À̸§ °ø°£¿¡¼­´Â ´õ ÀÌ»ó ´Ù¸¥ Zend_Session_Namespace (À»)¸¦ ÀÛ¼ºÇÏÁö ¾Ê°Ô Áö½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô Çϸé, ±× ÈÄ °°Àº À̸§ °ø°£¿¡¼­ Zend_Session_Namespace ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÏ·Á°í ÇßÀ» ¶§¿¡ ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù. À̰ÍÀº ¿É¼ÇÀÇ ¼³Á¤À̸ç, µðÆúÆ®°¡ ¾Æ´Õ´Ï´Ù.ÇϳªÀÇ À̸§ °ø°£¿¡ ´ëÇØ¼­´Â ÇϳªÀÇ ÀνºÅϽº¸¸À» »ç¿ëÇÏ°í ½Í´Ù°í ÇÏ´Â »ç¶÷À» À§Çؼ­ ³²±â°í ÀÖ½À´Ï´Ù. À̰ÍÀº, ƯÁ¤ÀÇ ¼¼¼Ç À̸§ °ø°£À» ÄÄÆÛ³ÍÆ®°¡ °©Àڱ⠰íÃÄ ½á ¹ö¸®´Â À§Ç輺À» ÁÙÀÔ´Ï´Ù. ¼¼¼Ç¿¡ÀÇ ¾×¼¼½º°¡ ¿ëÀÌÇÑ °ÍÀº ¾ø¾îÁö±â ¶§¹®ÀÔ´Ï´Ù. ±×·¯³ª, À̸§ °ø°£¿¡ ´ëÇØ¼­ ÇϳªÀÇ ÀνºÅϽº·Î ÇÑÁ¤ÇØ ¹ö¸®¸é, ÄÚµåÀÇ ¾çÀÌ Áõ°¡Çغ¸´Ù º¹ÀâÇÏ°Ô µÇ¾î ¹ö¸³´Ï´Ù.¿Ö³ÄÇϸé, Æí¸®ÇÑ $aNamespace = new Zend_Session_Namespace('aNamespace'); ÇÏÁö¸¸ ÃÖÃÊÀÇ ÇÑ ¹ø ¹Û¿¡ »ç¿ëÇÒ ¼ö ¾ø°Ô µÇ±â ¶§¹®ÀÔ´Ï´Ù.±× ÀÌÈÄ´Â, ÀÌÇÏÀÇ ¿¹ÀÇ °°°Ô µË´Ï´Ù.

·Ê 25.10. ´ÜÀÏÀÇ ÀνºÅϽº¿¡ÀÇ Á¦ÇÑ


<?php
    
require_once 'Zend/Session.php';
    
$authSpaceAccessor1 = new Zend_Session_Namespace('Zend_Auth');
    
$authSpaceAccessor2 = new Zend_Session_Namespace('Zend_Auth'Zend_Session_Namespace::SINGLE_INSTANCE);
    
$authSpaceAccessor1->foo 'bar';
    
assert($authSpaceAccessor2->foo'bar'); //  Åë°úÇÕ´Ï´Ù
    
doSomething($options$authSpaceAccessor2); //  Çʿ信 µû¶ó¼­ ¾ÆÅ©¼¼»ç¸¦ °Ç³×ÁÝ´Ï´Ù
    
.
    .
    .
    
$aNamespaceObject = new Zend_Session_Namespace('Zend_Auth'); //  À̰ÍÀº ¿¡·¯°¡ µË´Ï´Ù
?>

À§ÀÇ ¿¹·Î Zend_Session_Namespace ÀÇ constructor¡¡ ¡¡ ÀÇ Á¦2 ÆÄ¶ó¹ÌÅÍ·Î ÁöÁ¤ÇØ ÀÖ´Â °ÍÀº, ÇâÈÄ 'Zend_Auth' À̸§ °ø°£¿¡¼­ »õ·Ó°Ô Zend_Session (À»)¸¦ ÀÛ¼ºÇÒ ¼ö ¾ø´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÛ¼ºÇÏ·Á°í Çϸé, ¿¹¿Ü°¡ ½½·Î¿ì µË´Ï´Ù. À§ÀÇ Äڵ带 ½ÇÇàÇÑ ´ÙÀ½Àº new Zend_Session_Namespace('Zend_Auth') ÇÏÁö¸¸ ÇÒ ¼ö ¾ø°Ô µË´Ï´Ù.±× ¶§¹®¿¡, µ¿ÀÏ ¸®Äù½ºÆ®³»¿¡¼­ ±× À̸§ °ø°£ÀÇ ¼¼¼ÇÀ» »ç¿ëÇÏ·Á¸é , ÃÖÃÊ·Î ÀÛ¼ºÇÑ ÀνºÅϽº ( À§ÀÇ ¿¹¿¡¼­´Â $authSpaceAccessor2) (À»)¸¦ ¾îµð¿£°¡ º¸Á¸ÇØ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î Á¤Àû º¯¼ö¿¡ ÀÌ ÀνºÅϽº¸¦ °Ý³³Çϰųª ÀÌ À̸§ °ø°£ÀÇ ¼¼¼ÇÀ» ÇÊ¿ä·Î ÇÏ´Â ¸Þ¼Òµå¿¡ Á÷Á¢ °Ç³×Áְųª ÇÕ´Ï´Ù. ¼¼¼ÇÀÇ ¶ô ( À§¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ) ÂÊÀÌ, À̸§ °ø°£¿¡ÀÇ ¾×¼¼½º¸¦ Á¦ÇÑÇÏ´Â ¹æ¹ýÀ¸·Î¼­´Â º¸´Ù Æí¸®ÇÏ°í °£´ÜÇÕ´Ï´Ù.

25.3.5. À̸§ °ø°£¿¡¼­ÀÇ ¹è¿­ÀÇ »ç¿ë

À̸§ °ø°£³»ÀÇ ¹è¿­À» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù. °¡Àå °£´ÜÇÑ ´ëÀÀ¹ýÀº, ÇÊ¿äÇÑ °ªÀ» ¸ðµÎ ¼³Á¤ÇÏ°í ³ª¼­ ¹è¿­À» º¸Á¸ÇÏ´Â °ÍÀÔ´Ï´Ù. ZF-800 ±×¸®°í, ¸ÅÁ÷ ¸Þ¼Òµå¿Í ¹è¿­À» »ç¿ëÇϰí ÀÖ´Â ¸¹Àº PHP ¾îÇø®ÄÉÀ̼ǿ¡ ¿µÇâÀ» ÁÖ´Â ±âÁ¸ÀÇ ¹®Á¦¸¦ ¼³¸íÇϰí ÀÖ½À´Ï´Ù.

·Ê 25.11. ¹è¿­¿¡ °üÇÑ ±âÁ¸ÀÇ ¹®Á¦


<?php
    $sessionNamespace 
= new Zend_Session_Namespace('Foo');
    
$sessionNamespace->array = array();
    
$sessionNamespace->array['testKey'] = 1// PHP 5.2.1  º¸´Ù ÀüÀÇ ¹öÁ¯¿¡¼­´Â µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù
?>

¼¼¼Ç À̸§ °ø°£¿¡ ´ëÀÔÇÑ ´ÙÀ½¿¡ ¹è¿­À» º¯°æÇÒ Çʿ䰡 ³ª¿ÔÀ» °æ¿ì´Â, µÎ ÀÏ´Ü ¹è¿­À» ÃëµæÇÕ´Ï´Ù.

·Ê 25.12. ȸÇÇÃ¥: ÃëµæÇØ º¯°æÇØ, ±×¸®°í º¸Á¸ÇÑ´Ù


<?php
    $sessionNamespace 
= new Zend_Session_Namespace('Foo');
    
$sessionNamespace->array = array('tree' => 'apple');
    
$tmp $sessionNamespace->array;
    
$tmp['fruit'] = 'peach';
    
$sessionNamespace->array $tmp;
?>

ȤÀº, ¸ñÀûÀÇ ¹è¿­¿¡ÀÇ ÂüÁ¶¸¦ º¸°ü À¯ÁöÇÏ´Â ¹è¿­À» ¼¼¼Ç¿¡ º¸Á¸ÇØ, °£Á¢ÀûÀ¸·Î ¾×¼¼½º ÇÕ´Ï´Ù.

·Ê 25.13. ȸÇÇÃ¥: ÂüÁ¶¸¦ Æ÷ÇÔÇÑ ¹è¿­À» º¸Á¸ÇÑ´Ù


<?php
    $myNamespace 
= new Zend_Session_Namespace('mySpace');

    
//  ¹ö±×°¡ ÀÖ´Â ¹öÁ¯ÀÇ PHP  ±×·¸Áö¸¸ µ¿ÀÛÇÕ´Ï´Ù
    
$a = array(1,2,3);
    
$myNamespace->someArray = array( & $a ) ;
    
$a['foo'] = 'bar';
?>

25.3.6. ¼¼¼Ç°ú ÀÎÁõÀÇ °ø¿ë

Zend_Auth ¿ë¹«ÀÇ ÀÎÁõ ¾î´ðÅͰ¡ µ¹·ÁÁÖ´Â ÀÎÁõ °á°ú°¡ ¿ÀºêÁ§Æ®À̸ç ( ºñÃßõÀÔ´Ï´Ù) ¹è¿­Àº ¾Æ´Ï¾ú´ø °æ¿ì´Â, ¼¼¼ÇÀ» °³½ÃÇϱâ Àü¿¡ ÀÎÁõ Ŭ·¡½º¸¦ require ÇØ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù. ±× ´ë½Å¿¡, ¼¼¼Ç À̸§ °ø°£ÀÇ ±âÁ¸ÀÇ Å°¸¦ ±âÃÊ·Î ÀÎÁõ ¾î´ðÅͳ»¿¡¼­ °è»êÇÑ °ªÀ» º¸Á¸ÇØ µÎ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î,Zend_Auth ÀÇ µðÆúÆ®ÀÇ µ¿ÀÛÀº, À̰ÍÀ» À̸§ °ø°£ 'Zend_Auth' ÀÇ Å° 'storage' ¿¡ ¹èÄ¡ÇÕ´Ï´Ù.

Zend_Auth ¿¡ ´ëÇØ¼­ ÀÎÁõ ÅäÅ«À» ¼¼¼Ç°£¿¡ Áö¼Ó½ÃŰÁö ¾Ê°Ô Áö½ÃÇØ, ¼öµ¿À¸·Î ÀÎÁõ ID (À»)¸¦ ¼¼¼Ç¿¡ °Ý³³ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯¸é, ¼¼¼Ç À̸§ °ø°£³»°¡ ÁÁ°Ô ¾Ë·ÁÁø Àå¼Ò¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾îÇø®ÄÉÀ̼ǿ¡ µû¶ó¼­´Â, »ç¿ëÇÏ´Â ±ÇÇÑ Á¤º¸³ª ÀÎÁõ Á¤º¸¸¦ ƯÁ¤ÀÇ Àå¼Ò¿¡ º¸Á¸ÇØ¾ß ÇÏ´Â °Íµµ ÀÖ°ÚÁö¿ä. ¸¹Àº ¾îÇø®ÄÉÀ̼ÇÀº, ÀÎÁõ½Ã Áï Zend_Auth ÀÇ authenticate() ¸Þ¼Òµå ½ÇÇà½ÃÀÇ ID ( ¿¹¸¦ µé¾î À¯Àú¸í) (À»)¸¦ ƯÁ¤ÀÇ ID ( ÀÏÀÇ¿¡ ÇÒ´çÇÑ Á¤¼öÄ¡ µî) ¿¡ °ü·ÃÁþ°í ÀÖ½À´Ï´Ù.

·Ê 25.14. ·Ê: ´Ü¼øÈ­ ÇÑ ÀÎÁõ ID ¿¡ÀÇ ¾×¼¼½º


<?php
    
//  ÀÎÁõÀüÀÇ ¸®Äù½ºÆ®
    
require_once 'Zend/Auth/Result.php';
    require_once 
'Zend/Auth/Adapter/Digest.php';
    
$adapter = new Zend_Auth_Adapter_Digest($filename$realm$username$password);
    
$result $adapter->authenticate();
    require_once 
'Zend/Session/Namespace.php';
    
$namespace Zend_Session_Namespace('Zend_Auth');
    if (
$result->isValid()) {
        
$namespace->authorizationId $result->getIdentity();
        
$namespace->date time();
    } else {
        
$namespace->attempts++;
    }

    
//  ±× ÀÌÈÄÀÇ ¸®Äù½ºÆ®
    
require_once 'Zend/Session.php';
    
Zend_Session::start();
    
$namespace Zend_Session_Namespace('Zend_Auth');

    echo 
"Valid: ", (empty($namespace->authorizationId) ? 'No' 'Yes'), "n"';
    echo "Authorization / user Id: ", (empty($namespace->authorizationId)
        ? '
none' : print_r($namespace->authorizationId, true)), "n"';
    echo 
"Authentication attempts: ", (empty($namespace->attempts)
        ? 
'0' $namespace->attempts), "n"';
    echo "Authenticated on: ",
        (empty($namespace->date) ? '
No' : date(DATE_ATOM, $namespace->date), "n"';
?>

25.3.7. À¯´Ö Å×½ºÆ®·ÎÀÇ ¼¼¼ÇÀÇ »ç¿ë

Zend Framework ÀÚüÀÇ Å×½ºÆ®¿¡´Â PHPUnit (À»)¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ¸¹Àº °³¹ßÀÚ´Â, ÀÌ Å×½ºÆ® ½ºÀ§Æ®¸¦ È®ÀåÇØ ÀÚ½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÇ Äڵ带 Å×½ºÆ®Çϰí ÀÖ½À´Ï´Ù. À¯´Ö Å×½ºÆ®Áß¿¡¼­, ¼¼¼ÇÀÇ Á¾·áÈÄ¿¡ ½á °ü·ÃÀÇ ¸Þ¼Òµå¸¦ »ç¿ëÇϸé "Zend_Session is currently marked as read-only" ±×·¸´Ù°í ÇÏ´Â ¿¹¿Ü°¡ ½½·Î¿ì µË´Ï´Ù.±×·¯³ª,Zend_Session (À»)¸¦ »ç¿ëÇÏ´Â À¯´Ö Å×½ºÆ®¿¡´Â ¿äÁÖÀÇÀÔ´Ï´Ù. ¼¼¼ÇÀ» ´Ý°Å³ª (Zend_Session::writeClose()) ÆÄ±âÇϰųª (Zend_Session::destroy()) Çϸé, ±× ÀÌÈÄ´Â Zend_Session_Namespace ¿¡ÀÇ Å°ÀÇ ¼³Á¤À̳ª »èÁ¦¸¦ ÇÒ ¼ö ¾ø°Ô µË´Ï´Ù. À̰ÍÀº,ext/session (ÀÌ)³ª,PHP ÀÇ PHP session_destroy() ¹× session_write_close() ÀÇ »ç¾ç¿¡ ÀÇÇÏ´Â °ÍÀÔ´Ï´Ù, À̰͵鿡´Â, À¯´Ö Å×½ºÆ®ÀÇ setup/teardown ½Ã°£¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â, À̸¥¹Ù "undo" ±â´ÉÀÌ °®ÃçÁöÁö ¾Ê½À´Ï´Ù.

ÀÌ ¹®Á¦ÀÇ È¸ÇÇÃ¥Àº, tests/Zend/Session/SessionTest.php ¹× SessionTestHelper.php ÀÇ À¯´Ö Å×½ºÆ® Å×½ºÆ® testSetExpirationSeconds() (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ. À̰ÍÀº,PHP ÀÇ exec() ¿¡ ÀÇÇØ¼­ º°ÇÁ·Î¼¼½º¸¦ ±âµ¿Çϰí ÀÖ½À´Ï´Ù. »õ·Î¿î ÇÁ·Î¼¼½º°¡, ºê¶ó¿ìÀú·ÎºÎÅÍÀÇ µÎ¹øÂ° ÀÌÈÄÀÇ ¸®Äù½ºÆ®¸¦ ½Ã¹Ä·¹ÀÌÆ® ÇÕ´Ï´Ù. ÀÌ º°ÇÁ·Î¼¼½ºÀÇ °³½Ã½Ã¿¡´Â ¼¼¼ÇÀ» " ÃʱâÈ­" ÇÕ´Ï´Ù. Á¤È®È÷, º¸ÅëÀÇ PHP ½ºÅ©¸³Æ®°¡ À¥ ¸®Äù½ºÆ®¸¦ ½ÇÇàÇÏ´Â °æ¿ì¿Í °°Àº µ¿ÀÛÀÔ´Ï´Ù. ¶Ç, È£Ãâ¿øÀÇ ÇÁ·Î¼¼½º·Î $_SESSION[] (À»)¸¦ º¯°æÇϸé, child process·Î ±×°ÍÀÌ ¹Ý¿µµË´Ï´Ù.Ä£Ãø¿¡¼­´Â exec() (À»)¸¦ »ç¿ëÇϱâ Àü¿¡ ¼¼¼ÇÀ» ´Ý°í ÀÖ½À´Ï´Ù.

·Ê 25.15. PHPUnit ¿¡ ÀÇÇÑ,Zend_Session* (À»)¸¦ »ç¿ëÇÑ ÄÚµåÀÇ Å×½ºÆ®


<?php
        
// setExpirationSeconds()  (À»)¸¦ Å×½ºÆ®ÇÕ´Ï´Ù
        
require 'tests/Zend/Session/SessionTestHelper.php'// trunk/  ÀÇ SessionTest.php  µµ ÂüÁ¶ÇØ ÁֽʽÿÀ
        
$script 'SessionTestHelper.php';
        
$s = new Zend_Session_Namespace('space');
        
$s->'apple';
        
$s->'orange';
        
$s->setExpirationSeconds(5);

        
Zend_Session::regenerateId();
        
$id Zend_Session::getId();
        
session_write_close(); //  ¼¼¼ÇÀ» °³¹æÇØ, ÀÌ ÀÌÈÄ¿¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù
        
sleep(4); //  ¹«È¿°¡ µÉ Á¤µµÀÇ ½Ã°£ÀÌ ¾Æ´Õ´Ï´Ù
        
exec($script "expireAll $id expireAll"$result);
        
$result $this->sortResult($result);
        
$expect ';a === apple;o === orange;p === pear';
        
$this->assertTrue($result === $expect,
            
"iteration over default Zend_Session namespace failed; expecting result === '$expect', but got '$result'");

        
sleep(2); //  ¹«È¿°¡ µË´Ï´Ù ( ÀüºÎ 6  ÃÊ´ë±âÇϰí ÀÖ½À´Ï´Ù¸¸, À¯È¿±â°£Àº 5  ÃÊÀÔ´Ï´Ù)
        
exec($script "expireAll $id expireAll"$result);
        
$result array_pop($result);
        
$this->assertTrue($result === '',
            
"iteration over default Zend_Session namespace failed; expecting result === '', but got '$result')");
        
session_start(); //  ÀÎÀ§ÀûÀ¸·Î ÁßÁö ÇÑ ¼¼¼ÇÀ» ºÎȰ½Ãŵ´Ï´Ù

        //  À̰ÍÀ» ´Ù¸¥ Å×½ºÆ®¿¡ ºÐÇÒÀϵµ ÇÒ ¼ö ÀÖ½À´Ï´Ù.±×·¯³ª ½ÇÁ¦ÀÇ °÷,
        //  À§ÀÇ Å×½ºÆ®ÀÇ ÀÜÇØ°¡ ÀÌÇÏÀÇ Å×½ºÆ®¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù°í Çϸé, ±×°ÍÀº ¹ö±×Áö¿ä.
        //  ¹ö±×´Â, ¿©±â¼­ ¹ß°ßÇØ µÎ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù.
        
$s = new Zend_Session_Namespace('expireGuava');
        
$s->setExpirationSeconds(5'g'); //  À̸§ °ø°£³»ÀÇ Å° Çϳª¸¸À» ¹«È¿·Î ÇÏ·Á°í ÇÕ´Ï´Ù
        
$s->'guava';
        
$s->'peach';
        
$s->'plum';

        
session_write_close(); //  ¼¼¼ÇÀ» °³¹æÇØ, ÀÌ ÀÌÈÄ¿¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù
        
sleep(6); //  ¹«È¿°¡ µÉ Á¤µµÀÇ ½Ã°£ÀÌ ¾Æ´Õ´Ï´Ù
        
exec($script "expireAll $id expireGuava"$result);
        
$result $this->sortResult($result);
        
session_start(); //  ÀÎÀ§ÀûÀ¸·Î ÁßÁö ÇÑ ¼¼¼ÇÀ» ºÎȰ½Ãŵ´Ï´Ù
        
$this->assertTrue($result === ';p === plum',
            
"iteration over named Zend_Session namespace failed (result=$result)");
?>