{"id":617,"date":"2002-10-17T01:12:05","date_gmt":"2002-10-17T01:12:05","guid":{"rendered":"http:\/\/dev.jblove.net\/?p=617"},"modified":"2002-10-17T01:12:05","modified_gmt":"2002-10-17T01:12:05","slug":"%ec%84%b8%ec%85%98%ec%a0%95%eb%b3%b4%eb%a5%bc-db%ec%97%90-%eb%84%a3%ea%b3%a0-%ec%a4%91%eb%b3%b5%eb%a1%9c%ea%b7%b8%ec%9d%b8-%eb%a7%89%ea%b3%a0-%ec%82%ac%ec%9d%b4%ed%8a%b8-%ed%86%b5%ed%95%a9%eb%a1%9c","status":"publish","type":"post","link":"https:\/\/jblove.net\/?p=617","title":{"rendered":"\uc138\uc158\uc815\ubcf4\ub97c DB\uc5d0 \ub123\uace0 \uc911\ubcf5\ub85c\uadf8\uc778 \ub9c9\uace0 \uc0ac\uc774\ud2b8 \ud1b5\ud569\ub85c\uadf8\uc778 \ud558\ub294 \uc18c\uc2a4"},"content":{"rendered":"<p>DB\ud074\ub798\uc2a4\ub294 \ub123\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ucc38\uace0\uc815\ub3c4 \ud558\uc2dc\ub77c\uace0 \uacf5\uac1c\ud569\ub2c8\ub2e4. \uc5ec\uae30 \uac8c\uc2dc\ud310\uc5d0\uc11c \ud301\ub3c4 \uc880 \uc5bb\uc5c8\uc2b5\ub2c8\ub2e4. \uc798 \ubcf4\uc2dc\uace0 \uc751\uc6a9\ud574 \ubcf4\uc138\uc694!<\/p>\n<p>\uc138\uc158\uad6c\uc6b8 \ub54c DB\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc911\ubcf5\ub85c\uadf8\uc778\uc744 \ub9c9\uace0, 2\ucc28\ub3c4\uba54\uc778\uc744 \uc0ac\uc6a9\ud558\ub294 \uc0ac\uc774\ud2b8\uc5d0\uc11c \ud1b5\ud569\ub85c\uadf8\uc778\uc774 \uac00\ub2a5\ud1a0\ub85d\ud55c \uc18c\uc2a4\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub298 \ud589\ubcf5\ud558\uc138\uc694!<\/p>\n<p>====== \uc544\ub798\ubd80\ud130 \uc18c\uc2a4\uc785\ub2c8\ub2e4. ==============<\/p>\n<p><?php<br \/>\n\/\/!! eZSession DB (\uc138\uc158 DB\ud578\ub4e4\ub9c1 \ubc0f \ud1b5\ud569\ub85c\uadf8\uc778)<br \/>\n\/*<\/p>\n<p>CREATE TABLE &#8220;ezsession_session&#8221; (<br \/>\n   &#8220;sesskey&#8221; varchar(33) NOT NULL,<br \/>\n   &#8220;expiry&#8221; int4 NOT NULL,<br \/>\n   &#8220;value&#8221; text NOT NULL,<br \/>\n   &#8220;uid&#8221; int4 NOT NULL,<br \/>\n   &#8220;security&#8221; varchar(1) NOT NULL,<br \/>\n   &#8220;remoteip&#8221; varchar(20),<br \/>\n   CONSTRAINT &#8220;ezsession_session_pkey&#8221; PRIMARY KEY (&#8220;sesskey&#8221;)<br \/>\n);<\/p>\n<p>        \/\/ start session handling<br \/>\n        include_once( &#8220;classes\/ezsession.php&#8221; );<\/p>\n<p>        session_set_save_handler (&#8220;sess_open&#8221;, &#8220;sess_close&#8221;, &#8220;sess_read&#8221;, &#8220;sess_write&#8221;, &#8220;sess_destroy&#8221;, &#8220;sess_gc&#8221;);<br \/>\n        session_set_cookie_params( 0, &#8220;\/&#8221;, &#8220;.ohmytravel.com&#8221; );<br \/>\n        session_start();<br \/>\n*\/<\/p>\n<p>include_once( &#8220;classes\/ezdb.php&#8221; );<\/p>\n<p>$ini =&#038; INIFile::globalINI();<br \/>\n$SesstionTimeOut = 30 * 60;<br \/>\n$maxlifetime = $SesstionTimeOut;<\/p>\n<p>\nfunction sess_open( $save_path, $session_name )<br \/>\n{<br \/>\n        global $sess_save_path, $sess_session_name;<\/p>\n<p>\/\/        $sess_save_path = $save_path;<br \/>\n\/\/        $sess_session_name = $session_name;<\/p>\n<p>        return true;<br \/>\n}<\/p>\n<p>\nfunction sess_close()<br \/>\n{<br \/>\n        return true;<br \/>\n}<\/p>\n<p>\nfunction sess_read( $key )<br \/>\n{<br \/>\n        global $sess_save_path, $sess_session_name;<\/p>\n<p>        $db =&#038; eZDB::globalDatabase();<\/p>\n<p>        $value_array = array();<\/p>\n<p>        $db->array_query( $value_array, &#8220;SELECT value FROM ezsession_session WHERE sesskey=&#8217;$key&#8217; AND expiry > &#8221; . time() );<\/p>\n<p>        if( count( $value_array ) == 1 )<br \/>\n        {<br \/>\n                \/\/ \uc138\uc158\uc2dc\uac04\uc774 \ud604\uc7ac\uc2dc\uac04\ubcf4\ub2e4 \ud06c\ub2e4\uba74 \uc815\ubcf4\ub97c \uac00\uc838\uc628\ub2e4.<br \/>\n                return $value_array[0][$db->fieldName(&#8220;value&#8221;)];<br \/>\n        }<br \/>\n        else<br \/>\n        {<br \/>\n                $db->query( &#8220;DELETE FROM ezsession_session WHERE sesskey=&#8217;$key'&#8221; );<br \/>\n                return false;<br \/>\n        }<br \/>\n}<\/p>\n<p>\nfunction sess_write( $key, $sess_data )<br \/>\n{<br \/>\n        global $sess_save_path, $sess_session_name, $maxlifetime;<\/p>\n<p>        $db =&#038; eZDB::globalDatabase();<br \/>\n        $ret = false;<\/p>\n<p>        $session_array = array();<br \/>\n        $check_array = array();<\/p>\n<p>        $expiry = time() + $maxlifetime;<br \/>\n        $value = addslashes( $sess_data );<br \/>\n        $remoteip = $_SERVER[&#8220;REMOTE_ADDR&#8221;];<\/p>\n<p>        \/\/ \uc138\uc158\uc815\ubcf4\uac00 \uc874\uc7ac\ud558\ub294\uc9c0 \uccb4\ud06c<br \/>\n        $db->array_query( $session_array, &#8220;SELECT * FROM ezsession_session WHERE sesskey=&#8217;$key&#8217; AND value IS NOT NULL&#8221; );<\/p>\n<p>        if ( count( $session_array ) == 1 ) \/\/ \uc138\uc158\uc5c5\ub370\uc774\ud2b8 &#8211; DB\uc758 \uc2dc\uac04\uc774 \ud604\uc7ac\uc2dc\uac04\ubcf4\ub2e4 \ud06c\uba74 \uacc4\uc18d \uc2dc\uac04\uc744 \uc5c5\ub370\uc774\ud2b8 \uc2dc\ucf1c \uc138\uc158\uc744 \uc720\uc9c0.<br \/>\n        {<br \/>\n                $res = $db->query( &#8220;UPDATE ezsession_session SET expiry=&#8217;$expiry&#8217; WHERE sesskey=&#8217;$key&#8217; AND expiry > &#8221; . time() );<\/p>\n<p>                if( $res == true )<br \/>\n                        $ret = true;<br \/>\n        }<br \/>\n        else if ( count( $session_array ) == 0 ) \/\/ \uc138\uc158\uc815\ubcf4\uac00 \uc5c6\ub294 \uacbd\uc6b0. DB\uc5d0 \uc138\uc158\uc744 \ucd94\uac00\ud55c\ub2e4.<br \/>\n        {<br \/>\n                if ( $sess_data )<br \/>\n                {<br \/>\n                        $uid = $GLOBALS[&#8216;ezuser_session_id&#8217;];<\/p>\n<p>                        \/\/ \uc774\uc911 \ub85c\uadf8\uc778 \ucc28\ub2e8! \ud750\ud750~ \uc8fc\uae30\ub139! \uc644\ubcbd\ud55c \uc911\ubcf5\ub85c\uadf8\uc778 \ucc28\ub2e8\uc774\uc58c! \u314b\u314b\u314b~<br \/>\n                        $db->array_query( $check_array, &#8220;SELECT value FROM ezsession_session WHERE uid=&#8217;$uid&#8217; AND remoteip!=&#8217;$remoteip'&#8221; );<\/p>\n<p>                        \/\/ \uc911\ubcf5\ub85c\uadf8\uc778\uc744 \uac80\uc0ac\ud558\uae30 \uc704\ud55c \ud544\ub4dc. O \uc815\uc0c1, X \uc911\ubcf5\ub85c\uadf8\uc778.<br \/>\n                        $security = &#8220;O&#8221;;<br \/>\n                        if ( count( $check_array ) == 1 )<br \/>\n                        {<br \/>\n                                $security = &#8220;X&#8221;;<br \/>\n                        }<\/p>\n<p>                        \/\/ lock the table<br \/>\n                        $db->begin();<br \/>\n                        $db->lock( &#8220;ezsession_session&#8221; );<\/p>\n<p>                        \/\/ \uc138\uc158\ucd94\uac00 &#8211; \ub85c\uadf8\uc778\ud588\uc744 \uacbd\uc6b0 $sess_data \uc815\ubcf4\uac00 \ud55c\ubc88 \ub118\uc5b4\uc628\ub2e4. \uadf8 \ub54c\ub9cc \ucd94\uac00\ud55c\ub2e4.<br \/>\n                        $res = $db->query( &#8220;INSERT INTO ezsession_session ( sesskey, expiry, value, uid, security, remoteip ) VALUES ( &#8216;$key&#8217;, &#8216;$expiry&#8217;, &#8216;$value&#8217;, &#8216;$uid&#8217;, &#8216;$security&#8217;, &#8216;$remoteip&#8217; )&#8221; );<\/p>\n<p>                        if ( $res == true )<br \/>\n                                $ret = true;<br \/>\n                }<br \/>\n        }<\/p>\n<p>        $db->unlock();<\/p>\n<p>        if ( $ret == false )<br \/>\n                $db->rollback( );<br \/>\n        else<br \/>\n                $db->commit();<\/p>\n<p>        return $ret;<br \/>\n}<\/p>\n<p>\nfunction sess_destroy( $key )<br \/>\n{<br \/>\n        global $sess_save_path, $sess_session_name;<\/p>\n<p>        $db =&#038; eZDB::globalDatabase();<\/p>\n<p>        $db->query( &#8220;DELETE FROM ezsession_session WHERE sesskey=&#8217;$key'&#8221; );<\/p>\n<p>        return true;<br \/>\n}<\/p>\n<p>\n\/*********************************************<br \/>\n* WARNING &#8211; You will need to implement some *<br \/>\n* sort of garbage collection routine here.  *<br \/>\n*********************************************\/<br \/>\nfunction sess_gc( $maxlifetime )<br \/>\n{<br \/>\n        $db =&#038; eZDB::globalDatabase();<\/p>\n<p>        $db->query( &#8220;DELETE FROM ezsession_session WHERE expiry < \" . time() );\n\n\n        return true;<br \/>\n}<\/p>\n<p>\n\/\/ \uc138\uc158 \ud578\ub4e4\ub9c1 (\ub3c4\uba54\uc778 \uc785\ub825\uc2dc 1\ucc28\ub3c4\uba54\uc778 \uc55e\uc5d0 .(\uc810)\uc744 \ucc0d\uc5b4\uc57c \ud55c\ub2e4.)<br \/>\nsession_set_save_handler (&#8220;sess_open&#8221;, &#8220;sess_close&#8221;, &#8220;sess_read&#8221;, &#8220;sess_write&#8221;, &#8220;sess_destroy&#8221;, &#8220;sess_gc&#8221;);<br \/>\nsession_set_cookie_params( 0, &#8220;\/&#8221;, &#8220;.domain.com&#8221; );<br \/>\nsession_start();<\/p>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>DB\ud074\ub798\uc2a4\ub294 \ub123\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ucc38\uace0\uc815\ub3c4 \ud558\uc2dc\ub77c\uace0 \uacf5\uac1c\ud569\ub2c8\ub2e4. \uc5ec\uae30 \uac8c\uc2dc\ud310\uc5d0\uc11c \ud301\ub3c4 \uc880 \uc5bb\uc5c8\uc2b5\ub2c8\ub2e4. \uc798 \ubcf4\uc2dc\uace0 \uc751\uc6a9\ud574 \ubcf4\uc138\uc694! \uc138\uc158\uad6c\uc6b8 \ub54c DB\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc911\ubcf5\ub85c\uadf8\uc778\uc744 \ub9c9\uace0, 2\ucc28\ub3c4\uba54\uc778\uc744 \uc0ac\uc6a9\ud558\ub294 \uc0ac\uc774\ud2b8\uc5d0\uc11c \ud1b5\ud569\ub85c\uadf8\uc778\uc774 \uac00\ub2a5\ud1a0\ub85d\ud55c \uc18c\uc2a4\uc785\ub2c8\ub2e4. \ub298 \ud589\ubcf5\ud558\uc138\uc694! ====== \uc544\ub798\ubd80\ud130 \uc18c\uc2a4\uc785\ub2c8\ub2e4. ==============<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[51],"tags":[],"class_list":["post-617","post","type-post","status-publish","format-standard","hentry","category-papa-php"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jblove.net\/index.php?rest_route=\/wp\/v2\/posts\/617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jblove.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jblove.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jblove.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jblove.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=617"}],"version-history":[{"count":0,"href":"https:\/\/jblove.net\/index.php?rest_route=\/wp\/v2\/posts\/617\/revisions"}],"wp:attachment":[{"href":"https:\/\/jblove.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jblove.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jblove.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}