php4(zend)¿¡¼ÀÇ ¼¼¼Ç °ü¸®
ÀÛ¼ºÀÚ: ÀÌÈ«±â (1107071@hitel.net; http://www.chonga.pe.kr/)
ÀÛ¼ºÀÏ: 2000³â 5¿ù 20ÀÏ
¼öÁ¤ÀÏ: 2001³â 4¿ù 23ÀÏ
0. ¸ñÀû
ÀÌ ±ÛÀº ºÐ¸í ¸Å´º¾óÀ» º¸°í ÀÛ¼ºÇÑ °ÍÀ¸·Î °³ÀÎÀûÀÎ ¸ñÀû¿¡ ÀÇÇØ ¸¸µé¾îÁ³À¸¸ç
À߸øµÈ Á¡¿¡ ´ëÇؼ´Â ¸ÞÀÏÀ» º¸³»Áֽñ⠹ٶø´Ï´Ù.
±ÞÁ¶ÇÑ ºÎºÐÀÌ ¸¹¾Æ ¼öÁ¤Çؼ »ç¿ëÇؾßÇÒ ºÎºÐµµ ÀÖ±ä ÇÕ´Ï´Ù. ^^;
1. PHP¿¡¼ÀÇ ¼¼¼Ç °ü·Ã ÇÔ¼öµé..
session_start(); // ¼¼¼ÇIDÀ» Çϳª ÇÒ´çÇÕ´Ï´Ù.
session_register("a"); // a¶ó´Â ¼¼¼Ç º¯¼ö¸¦ ¼±¾ðÇÕ´Ï´Ù.
session_is_registered("a"); // a¶ó´Â ¼¼¼Ç º¯¼ö°¡ Á¸ÀçÇÏ´ÂÁö °Ë»çÇÕ´Ï´Ù.
session_destroy(); // ¼¼¼ÇÀ» Áö¿öÁÝ´Ï´Ù.
ÀÌ¿Ü¿¡µµ.. ¸î°¡Áö ´õ ÀÖÁö¸¸ ¿©±â¼ »ç¿ëÇÏ´Â °ÍÀº.. ÀÌ Á¤µµ¸é µÇ°ÚÁÒ.
2. PHP¿¡¼´Â ¼¼¼ÇID¸¦ Ŭ¶óÀ̾ðÆ® »óÀÇ À¯Áö¹ý
*ÄíÅ°·Î ¼¼ÆÃÇÏ´Â ¹æ¹ý
*URL·Î ³Ñ°ÜÁÖ´Â ¹æ¹ý(GET/POST)
URL·Î ³Ñ°ÜÁÖ´Â ¹æ¹ýÀº nextpage.php?SID=(¼¼¼ÇID) ÀÇ ÇüÅ·Π°è¼Ó ³Ñ±è
*URL Auto Forwarding ÀÌ Àִµ¥,
URL¿¡ Æ÷ÇÔ½ÃÅ°Áö¸¸ ¼û°ÜÁÖ´Â °Í °°½À´Ï´Ù.
(¼¼¹ø°°ÍÀ» Çϱâ À§Çؼ´Â phpÄÄÆÄÀϽà ¿É¼ÇÀ» ºÙ¿©¾ß ÇÕ´Ï´Ù.
--enable-trans-id ¸¦ ºÙ¿©¼ ÄÄÆÄÀÏÇ϶ó°í ¸Å´º¾ó¿¡´Â ³ª¿Í ÀÖ½À´Ï´Ù.)
±×¸®°í php.ini¿¡¼µµ ±âº» ¼³Á¤ÀÌ session.use_cookies °¡ 1·Î µÇ¾î ÄíÅ°¸¦
ÀÌ¿ëÇϵµ·Ï µÇ¾î ÀÖÀ¸¸ç ASPÀÇ ¼¼¼Çó¸®¿Í °°Àº ¹æ¹ýÀÔ´Ï´Ù.
3. ¼¹ö»ó¿¡¼ ¼¼¼ÇÀÇ ÀúÀå ¹æ¹ý
*±âº» ¼³Á¤À¸·Î /tmp¿¡ sess- ·Î ½ÃÀÛÇÏ´Â ÆÄÀÏ ÀúÀå ¹æ¹ý
*shared memory·Î ÀúÀåÇÏ´Â ¹æ¹ý
*»ç¿ëÀÚ Á¤ÀÇ ¹æ¹ý
(»ç¿ëÀÚ Á¤ÀÇ´Â µðºñ¿¡ ÀúÀåÇÏ´Â ¹æ¹ýÀ» Áö¿øÇÕ´Ï´Ù.)
php.ini¿¡¼ ±âº»¼³Á¤Àº session.save_handler¿¡ files¶ó ³Ö°í
¸Þ¸ð¸® ÀúÀå¹æ¹ýÀº mmÀ» ³Ö¾îÁÖ¸é µË´Ï´Ù.
ÆÄÀÏÀ̳ª ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ´Â ¹æ¹ýÀº °¡ºñÁö ÄÝ·ºÅÍ(gc)¿¡ °üÇÑ php.ini ¼³Á¤ÀÌ
²À ÇÊ¿äÇÕ´Ï´Ù. ¹Ù·Î ÀúÀåµÈ ¼¼¼Ç Á¦°Å Áֱ⸦ Á¤Çϱâ À§ÇؼÁö¿ä. ¾Æ·¡´Â °¡ºñÁö
ÄÝ·ºÅÍ¿¡ ´ëÇÑ º¯¼ö ¼³Á¤ÀÔ´Ï´Ù.
gc_probability ´Â °¡ºñÁö ÄÝ·ºÅ͸¦ ¾ó¸¶³ª ÀÚÁÖ ÇÒ °ÍÀΰ¡¸¦ ÆÛ¼¾Æ®·Î
ÁöÁ¤ÇÏ´Â °ÍÀ̸ç 100% ·Î ÁöÁ¤ÇÒ °æ¿ì, ¹Ù·Î¹Ù·Î °»½ÅÇÏ°Ô µË´Ï´Ù. (¿À¹öÇìµå°ÚÁÒ)
º¸ÅëÀº 1%¶ó°í Çϴµ¥, ÀÌ°ÍÀº ¾Æ¸¶µµ ¼¼¼Ç°ªµéÀÌ ¾î´ÀÁ¤µµ ÀÌ»ó áÀ» ¶§¿¡¸¸
°¡ºñÁö ÄÝ·ºÅ͸¦ µ¹¸®µµ·Ï ÇÏ´Â °Í °°½À´Ï´Ù.
±×¸®°í ÄíÅ°°¡ ¾Æ´Ñ GET/POST µîÀÇ ¼¼¼ÇIDÀ¯Áö¸¦ ÇϰԵǸé 10-20%·Î °»½ÅÁֱ⸦
¿Ã·ÁÁÖ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.(»¡¸® ¼ö°ÅÇؾßÇÒ Çʿ伺ÀÌ Àֱ⠶§¹®¿¡)
gc_maxlifetime ´Â ¼¼¼ÇÀÌ ¸¶Áö¸·À¸·Î ¾×¼¼½ºµÈ ÈÄ, ¾ó¸¶ÈÄÀÇ expire timeÀ» °¡Áú
°ÍÀΰ¡¿¡ ´ëÇÑ ¼³Á¤ÀÔ´Ï´Ù. ÀÌ°ÍÀº ¼¹ö ³»ºÎÀûÀ¸·Î °¡Áö´Â °ÍÀÌ°í, ¼¼ÆÃÀÌ ÇöÀç
1440(ÃÊ; 24ºÐ)À¸·Î µÇ¾î Àֳ׿ä.
4. ¼¼¼Ç µî·Ï ¹× üũ¿¡ ´ëÇÑ php ¿¹Á¦
** http://chonga.pe.kr/php3/session_enter¸¦ Âü°íÇϽøé ÃÖ½Å(?)ÀÇ ¼Ò½º¿Í
µ¿ÀÛ ¿¹¸¦ º¸½Ç ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡ ¿¹Á¦º¸´Ù Á¶±Ý ´õ °»½ÅµÇ¾ú½À´Ï´Ù. **
info.php´Â ÇöÀçÀÇ php.ini¿¡ ¼³Á¤µÈ ȤÀº ±âº»ÀûÀ¸·Î ÁöÁ¤µÈ php ¼³Á¤ º¯¼öµéÀ»
º¸¿©ÁÝ´Ï´Ù.
±âº»ÀûÀ¸·Î ¾Æ·¡ÀÇ ¿¹Á¦µéÀº session_lib.php¸¦ Á¦ÀÏ Ã³À½¿¡ includeÇÏ°í ÀÖ½À´Ï´Ù.
start.php?session_saved_id=1010101010
¿Í °°ÀÌ ½ÇÇàÇÏ¸é ¼¼¼ÇÀÌ ÀúÀåµË´Ï´Ù. ÀÌ´Â ²À ¼¼¼Çº¯¼ö¿¡ ´ëÇÑ ÀÎÀÚ¸¦ ¹Þ¾Æ¾ßÇÒ
ÇÊ¿ä°¡ ÀÖÀ» °æ¿ìÀ̸ç ÀÌ ¿¹Á¦´Â °Å±â¿¡ ¸ÂÃç Á¦À۵Ǿú½À´Ï´Ù.
(start.php¶ó°í ½ÇÇàÇÏ¸é ¼¼¼Ç µî·ÏÀÌ ¾ÈµÊ)
next.php°¡ start.php¿¡ ¸µÅ©µÇ¾î Àִµ¥ ÀÌ°Ç ¼¼¼Ç º¯¼ö°¡ ÀúÀåµÇ¾î ´ÙÀ½ ÆäÀÌÁö
¿¡¼ Á¦´ë·Î µ¿ÀÛÇÑ´Ù´Â °ÍÀ» º¸¿©ÁÖ±â À§ÇÑ °ÍÀÔ´Ï´Ù.
±×¸®°í, next.php¿¡´Â quit_session.php°¡ ¸µÅ©µÇ¾î Àִµ¥ ÀÌ°ÍÀº ¼¼¼ÇÀ» Á¾·á
½ÃÅ°´Â ¿¹¸¦ º¸¿©ÁÖ±â À§ÇÑ °ÍÀ̱¸¿ä.
[info.php ÆÄÀÏ]-----------------------------------------------------------------
php_info(); ?>
[info.php ÆÄÀÏÀÌ ¿¹]------------------------------------------------------------
[session_lib.php ÆÄÀÏ]----------------------------------------------------------
session_start(); // ¼¼¼Ç ½ÃÀÛ
// regSession()
// $session_save_id¸¦ ³Ñ°Ü ¹Þ¾Æ¼ ¼¼¼ÇÀÌ µî·ÏµÇ¾î ÀÖÁö ¾ÊÀ¸¸é ¼¼ÆÃÇÑ´Ù.
// php¿¡¼ÀÇ session º¯¼ö´Â $session_save_id¸¦ ÀúÀåÇÏ´Â $saved_id¿Í
// ŸÀӾƿôÀ» °Ë»çÇÏ´Â $session_access_timeÀ» ¼³Á¤ÇÑ´Ù.
function regSession() {
global $session_save_id,$saved_id,$last_access_time;
if (!session_is_registered("saved_id")) {
echo("ÀÎÁõÀÌ ÇÊ¿ä ".session_id()."-
");
echo "sessionÀÌ ".$session_save_id."°¡ µî·ÏµÇÁö ¾Ê¾Ò½À´Ï´Ù.
";
if (isset($session_save_id)) { // µî·ÏµÇ¸é..
$saved_id = $session_save_id;
echo $saved_id." =".$session_save_id." is set
";
session_register("saved_id");
$last_access_time = time(); // ÇöÀç ³¯Â¥
session_register("last_access_time");
echo "ÀÎÁõµÇ¾ú½À´Ï´Ù.
sid:".session_id()."
sname:".session.name."
smodname:".session_module_name()."
".$last_access_time."
";
} else {
echo "ÀÎÁõ½ÇÆÐ
";
session_destroy();
echo ("");
exit;
}
} else {
if (!session_is_registered("saved_id")) {
echo "ÀÎÁõ½ÇÆÐ2 $saved_id -
";
echo ("");
exit;
}
//echo "ÀÌ¹Ì ¼¼¼ÇÀÌ ½ÃÀÛµÈ »óÅÂÀ̹ǷΠ¾Æ¹«·± µ¿ÀÛÀ» ¾ÈÇÑ´Ù.
";
}
return;
}
// checkSession()
// ¼¼¼ÇÀÌ À¯ÁöµÇ´ÂÁö °Ë»çÇÏ°í $last_access_time°ú $saved_id¸¦
// °Ë»çÇؼ üũÇÑ´Ù.
// $last_access_timeÀ» ÇöÀç ½Ã°£°ú °Ë»çÇؼ timeout½Ã°£À» ÃÊ°úÇϸé
// ¼¼¼ÇÀ» Áö¿öÁØ´Ù.
function checkSession() {
global $last_access_time,$saved_id;
$bfalse=1;
if ( (session_is_registered("saved_id")) && (session_is_registered("last_access_time")) ) {
echo "saved_id is ".$saved_id. " and $last_access_time
";
$timeout = time() - $last_access_time;
if ( $timeout < 60 ) { // ÇöÀç´Â ŸÀӾƿôÀÌ 60ÃÊ À̳»±îÁö´Ù.
echo "¼¼¼Ç üũ ¼º°ø
";
$last_access_time = time();
$bfalse=0;
}
echo "time : ".time()." ".$timeout."
";
}
if ($bfalse==1 ) {
echo "üũ½ÇÆÐ
";
echo ("");
session_destroy();
exit;
}
// üũ°¡ ¼º°øÇÔ.
return;
}
?>
[session_lib.php ÆÄÀÏÀÇ ³¡]-----------------------------------------------------
[start.php ÆÄÀÏ]---------------------------------------------------------------
require ("./session_lib.php");
echo session_id()."
¼¼¼Ç Á¾·á ¿äû [next.php ÆÄÀÏÀÇ ³¡]------------------------------------------------------------ [quit.php ÆÄÀÏ]----------------------------------------------------------------- require ("./session_lib.php"); session_destroy(); ?> ¼¼¼ÇÀÌ Á¾·áµÊ. [quit.php ÆÄÀÏÀÇ ³¡]------------------------------------------------------------ 5. Âü°í http://www.php.net/manual/ref.session.php3 http://www.zend.org/zend/tut/session.php