±âº»ÀûÀÎ »ç¿ë¹ýÀÇ ¿¹·Î Zend Framework ÀÇ ¼¼¼ÇÀ» ¿ÏÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, º¸´Ù ÁÁÀº ¹æ¹ýµµ ÀÖ½À´Ï´Ù. Zend_Auth
ÀÇ
»ùÇà (À»)¸¦ º¾½Ã´Ù.À̰ÍÀº, µðÆúÆ®·Î Zend_Session_Namespace (À»)¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î½á, ÀÎÁõ ÅäÅ«À» Áö¼ÓÀû
À¸·Î À¯ÁöÇϰí ÀÖ´Â ¿¹ÀÔ´Ï´Ù. ÀÌ ¿¹´Â,Zend_Session_Namespace ¹× Zend_Auth (À»)¸¦ Àçºü¸£°í °£´ÜÇÏ°Ô ÅëÇÕÇϱâ
À§ÇÑ ÇϳªÀÇ ¹æ¹ýÀ» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù.
¸ðµç ¸®Äù½ºÆ®·Î Zend Framework ÀÇ ¼¼¼ÇÀ» »ç¿ëÇØ ¼¼¼Ç °ü¸®ÇÏ°í ½ÍÀº °æ¿ì´Â, ±âµ¿ ÆÄÀÏ·Î ¼¼¼ÇÀ» °³½ÃÇÕ´Ï´Ù.
±âµ¿ ÆÄÀÏ·Î ¼¼¼ÇÀ» °³½ÃÇÒ ¶§ , Çì´õ°¡ ºê¶ó¿ìÀú¿¡ ¼Û½ÅµÇ±â Àü¿¡ È®½ÇÈ÷ ¼¼¼ÇÀÌ ½ÃÀ۵ǵµ·Ï(µíÀÌ) ÇÕ´Ï´Ù. ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é
¿¹¿Ü°¡ ¹ß»ýÇØ ¹ö·Á, ¾Æ¸¶ À¯Àú°¡ º¸´Â ÆäÀÌÁö´Â ¹«³ÊÁ® ¹ö¸®°ÚÁö¿ä. ´Ù¾çÇÑ °íµµÀÇ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é , ¿ì¼± 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
(À»)¸¦ Ãß°¡ÇÕ´Ï´Ù.
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 (ÀÌ)°¡ µË´Ï´Ù.
¼¼¼Ç À̸§ °ø°£À» Àá±×¾î, ±× ÀÌÈÄ ±× À̸§ °ø°£ÀÇ µ¥ÀÌÅÍ¿¡ ¼Õº¼ ¼ö ¾ø°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ÀÇ À̸§ °ø°£À» Àо Àü¿ëÀ¸·Î
ÇÏ·Á¸é 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;
}
}
?>
À̸§ °ø°£À» »ç¿ëÇϸé, ÄÜÆ®·Ñ·¯¿¡ ÀÇÇÑ ¼¼¼Ç¿¡ÀÇ ¾×¼¼½º ½Ã¿¡ º¯¼öÀÇ ¿À¿°À» ¸·À» ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î,'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 {
//
¸¶°¨ ½Ã°£
}
?>
¿©±â¼ ¼³¸íÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏ´Â °Íº¸´Ùµµ, ¼¼¼ÇÀÇ ¶ô ( À§¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ) (À»)¸¦ »ç¿ëÇÏ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù.¿©±â¼ ¼³¸íÇÏ´Â ±â´ÉÀº, °¢ À̸§ °ø°£¿¡ÀÇ ¾×¼¼½º°¡ ÇÊ¿äÇÑ ¸ðµç ÇÔ¼ö ¹× ¿ÀºêÁ§Æ®¿¡ 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
)
(À»)¸¦ ¾îµð¿£°¡ º¸Á¸ÇØ µÑ Çʿ䰡 ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î Á¤Àû º¯¼ö¿¡ ÀÌ ÀνºÅϽº¸¦ °Ý³³Çϰųª ÀÌ À̸§ °ø°£ÀÇ ¼¼¼ÇÀ» ÇÊ¿ä·Î ÇÏ´Â ¸Þ¼Òµå¿¡
Á÷Á¢ °Ç³×Áְųª ÇÕ´Ï´Ù. ¼¼¼ÇÀÇ ¶ô ( À§¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ) ÂÊÀÌ, À̸§ °ø°£¿¡ÀÇ ¾×¼¼½º¸¦ Á¦ÇÑÇÏ´Â ¹æ¹ýÀ¸·Î¼´Â º¸´Ù Æí¸®ÇÏ°í °£´ÜÇÕ´Ï´Ù.
À̸§ °ø°£³»ÀÇ ¹è¿À» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù. °¡Àå °£´ÜÇÑ ´ëÀÀ¹ýÀº, ÇÊ¿äÇÑ °ªÀ» ¸ðµÎ ¼³Á¤ÇÏ°í ³ª¼ ¹è¿À» º¸Á¸ÇÏ´Â °ÍÀÔ´Ï´Ù. 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;
?>
ȤÀº, ¸ñÀûÀÇ ¹è¿¿¡ÀÇ ÂüÁ¶¸¦ º¸°ü À¯ÁöÇÏ´Â ¹è¿À» ¼¼¼Ç¿¡ º¸Á¸ÇØ, °£Á¢ÀûÀ¸·Î ¾×¼¼½º ÇÕ´Ï´Ù.
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"';
?>
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->a = 'apple';
$s->o = '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->g = 'guava';
$s->p = 'peach';
$s->p = '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)");
?>