¡¡¡¡CookieÊÇWeb·þÎñÆ÷·¢Ë͸øWebä¯ÀÀÆ÷µÄÌå»ýºÜСµÄ´¿Îı¾ÐÅÏ¢£¬ÒÔÎı¾ÎļþµÄÐÎʽ´æ·ÅÔÚÓû§µÄ¼ÆËã»úÖУ¬ÕâЩCookieÒ»°ãÓÃÓÚ±£´æÓû§µÄ·ÃÎÊ״̬£¬µ±Óû§ÔٴηÃÎÊͬһ¸öÍøÕ¾Ê±»á½«ÕâЩCookieÐÅÏ¢·¢ËͻطþÎñÆ÷£¬Ê¹µÃ·þÎñÆ÷Äܹ»»Ö¸´Óû§ÉÏÒ»´ÎµÄ·ÃÎÊ״̬¡£Ê¹ÓÃCookieµÄ¸ù±¾Ä¿µÄÊÇΪÁËÔÚÓû§·ÃÎÊÆÚ¼äʵÏÖ²»Í¬Ò³ÃæÖ®¼äµÄÊý¾Ý´«Ê䣬ÒÔ½â¾öHTTPÎÞ״̬µÄÎÊÌâ¡£Cookie¼¼ÊõÄܹ»ÔöÇ¿ÍøÕ¾µÄ·þÎñ¹¦ÄÜ£¬ÎªÓû§´øÀ´·½±ã¡£µ«ÊÇCookie»¹ÓÐÐí¶àÏÞÖÆºÍ²»×㣬Èçÿ̨Óû§¼ÆËã»úÒ»°ãÖ»ÔÊÐí´æ·Å300¸öCookie£¬Í¬Ò»¸öWeb·þÎñÆ÷Ö»ÄÜ·¢ËÍ20¸öCookieµÈ¡£
¡¡¡¡Õë¶ÔCookie¼¼ÊõµÄ¾ÖÏÞÐÔ£¬ÃÀ¹ú΢Èí¹«Ë¾Ê×ÏÈÌá³öÁ˻Ự(Session)µÄ¸ÅÄî[1]£¬²¢½«»á»°¼¼Êõ¼¯³ÉÔÚASP(¶¯Ì¬·þÎñÆ÷ÍøÒ³)ÓïÑÔÖС£»á»°ÊÇÖ¸Óû§·ÃÎÊWeb·þÎñÆ÷ÆÚ¼ä´æ·ÅÔÚWeb·þÎñÆ÷ÉϵÄËùÓÐÓëÓû§·ÃÎÊ״̬ÓйصÄÐÅÏ¢¡£Ã¿´Îд´½¨µÄ»á»°¶¼ÓÐÒ»¸öΨһµÄ±êʶ´®£¬³ÆÎª»á»°ID£¬»á»°ID±»±£´æÔÚWeb·þÎñÆ÷ÖУ¬ÆäËü»á»°ÐÅÏ¢¶¼ÔڻỰIDµÄË÷ÒýϽøÐб£´æºÍ¶ÁÈ¡¡£Ò»´Î»á»°´Ó´´½¨µ½±»É¾³ýµÄʱ¼ä³ÆÎª»á»°Éú´æÆÚ£¬»á»°Éú´æÆÚµÄ³¤¶ÌÓɻỰ¹ÜÀí»úÖÆ¾ö¶¨¡£CookieÓë»á»°µÄ²»Í¬Ö®´¦ÔÚÓÚ£ºCookie½«Óû§·ÃÎʵÄ״̬ÐÅϢͨ¹ýWebä¯ÀÀÆ÷´æ·ÅÔÚÓû§¼ÆËã»úÖУ¬¶ø»á»°Í¨¹ý»á»°¹ÜÀí»úÖÆ´æ·ÅÔÚWeb·þÎñÆ÷ÖС£
¡¡¡¡2 »á»°¹ÜÀí»úÖÆ
¡¡¡¡»á»°µÄÓÅÊÆÊÇËü¿ÉÒÔ±£´æÔÚWeb·þÎñÆ÷µÄÄÚ´æ¡¢Îļþ»òÊý¾Ý¿âÖУ¬ÕâÑù¾ÍÓÐÈýÖֻỰ¹ÜÀí»úÖÆ£º»ùÓÚÄÚ´æµÄ»á»°¹ÜÀí¡¢»ùÓÚÎļþµÄ»á»°¹ÜÀíºÍ»ùÓÚÊý¾Ý¿âµÄ»á»°¹ÜÀí¡£
¡¡¡¡»ùÓÚÄÚ´æµÄ»á»°¹ÜÀíÊÇÔËÐÐËÙ¶È×î¿ìµÄÒ»ÖÖ»úÖÆ£¬ËüÒ»°ãÔÚWeb·þÎñÆ÷µÄÄÚ´æÖÐרÃÅ¿ª±ÙÒ»¿é¹²ÏíÄÚ´æÇøÓò£¬ÔÚÕâÆ¬ÄÚ´æÇøÓòÖпÉÖ±½Ó¿ìËٵشæÈ¡»á»°ÐÅÏ¢¡£ÕâÖÖ»úÖÆ¶ÔWeb·þÎñÆ÷µÄϵͳÅäÖÃÒªÇó½Ï¸ß£¬ÐèҪϵͳ×ÊÔ´Äܹ»¸ºÔؽϸߵķÃÎÊÁ¿£¬·ñÔò²»½ö²»ÄÜÌá¸ß·ÃÎÊËÙ¶È£¬Ïà·´µØ»¹»áÒòϵͳ×ÊÔ´²»×ãÔì³É·þÎñÆ÷¸ºÔعýÖØ¡£
¡¡¡¡»ùÓÚÎļþµÄ»á»°¹ÜÀíÊÇʹÓÃ×î¹ã·ºµÄÒ»ÖÖ»úÖÆ£¬»á»°ÐÅÏ¢Ò»°ãÒÔÎı¾ÎļþµÄÐÎʽ´æ·ÅÔÚWeb·þÎñÆ÷µÄÓ²ÅÌÖС£ÕâÖÖ»úÖÆÒ×ÓÚʵÏÖ£¬¶Ô·þÎñÆ÷µÄϵͳÅäÖÃÒªÇ󲻸ߣ¬µ«ÊÇ´æ·Å»á»°ÐÅÏ¢µÄÎļþÖ®¼äȱ·¦Âß¼ÁªÏµ£¬µ±²¢·¢µÄ·ÃÎÊÁ¿ºÜ´óʱ»á»°¹ÜÀíµÄÎļþÊýÄ¿½«Ôö³¤ºÜ¿ì£¬Õâ²»½ö´ó´óÔö¼ÓÉè¼Æ»á»°¹ÜÀí»úÖÆµÄÄѶȣ¬Ò²»áÏàÓ¦µØÓ°Ïì´æÈ¡»á»°ÐÅÏ¢µÄËÙ¶È¡£
¡¡¡¡»ùÓÚÊý¾Ý¿âµÄ»á»°¹ÜÀíÊÇ×îÈÝÒ×À©Õ¹µÄÒ»ÖÖ»úÖÆ£¬ËüÐèÒªWeb·þÎñÆ÷ÓÐÒ»¸öÍøÂçÊý¾Ý¿âϵͳ֧³Å£¬»á»°ÐÅϢȫ²¿´æ·ÅÔÚÍøÂçÊý¾Ý¿âÖУ¬ÔÚÊý¾Ý¿âϵͳµÄÖ§³ÖÏ»Ự¹ÜÀí¿ÉÒÔ³ä·ÖÀûÓÃÊý¾Ý¿â¾ßÓеÄÊÂÎñ´¦Àí¡¢°²È«´æÈ¡ºÍÊý¾ÝÍêÕûÐÔ¼ìÑéµÈ»úÖÆ£¬ÓÐЧµØ¹ÜÀíËùÓеĻỰÐÅÏ¢¡£»á»°ÐÅÏ¢ÔÚÊý¾Ý¿âÖÐÏ໥֮¼äºÜÈÝÒ×½¨Á¢ÆðÂß¼ÁªÏµ£¬Éè¼Æ³öͳһ¿ìËٵĴæÈ¡·½·¨¡£ÕâÖÖ»úÖÆÌØ±ðÊÊÓÃÓÚ·ÃÎÊÁ¿ºÜ´óµÄ´óÖÐÐÍWebÍøÕ¾¡£
¡¡¡¡3 »ùÓÚÊý¾Ý¿âµÄ»á»°¹ÜÀíµÄʵÏÖ
¡¡¡¡±¾ÎÄÏÂÃæ½«¸ø³öÓÃPHPÓïÑÔʵÏÖµÄÒ»¸ö»ùÓÚÊý¾Ý¿âµÄ»á»°¹ÜÀí»úÖÆ[2]£¬Õâ¸ö»á»°¹ÜÀí»úÖÆ²ÉÓÃRedHat7.2 Linux²Ù×÷ϵͳƽ̨£¬Apache1.3.20 Web·þÎñÆ÷³ÌÐò£¬PostgreSQL7.0ÍøÂçÊý¾Ý¿â¡£±¾»úÖÆ¿É¸ù¾ÝÓû§µÄÐèÒª½øÐÐÐ޸ĺÍÀ©Õ¹£¬ÁíÍâ³ÌÐòÖÐʹÓÃÁËPHPÓïÑÔµÄPEAR¶ÔÏóÄ£¿é¿â£¬ÀûÓÃPEARÄÚµÄDBÄ£¿é¿ÉʵÏÖÊý¾Ý¿âÀàÐÍÎÞ¹ØÐÔ²Ù×÷[3]£¬Ò²¾ÍÊÇ˵Óû§µÄÍøÂçÊý¾Ý¿â¿ÉÑ¡ÔñLinux²Ù×÷ϵͳ֧³ÖµÄÆäËüÊý¾Ý¿â£¬ÈçMySQL¡¢Oracle¡¢SyBase¡¢InformixºÍMiniSQLµÈÊý¾Ý¿â¡£ÊµÏÖ´úÂëÈçÏ£º
¡¡¡¡1£®´´½¨Êý¾Ý¿âºÍ±í
ÒýÓÃ:CREATE DATABASE sessions
CREATE TABLE sessions ( sesskey char(32) PRIMARY KEY,
expiry int NOT NULL,
alue text NOT NULL)
¡¡¡¡2£®PHPÓïÑÔʵÏֵĻỰ¹ÜÀí»úÖÆ
ÒýÓÃ:require_once("DB.php");
$SESS_DBHOST = "localhost"; /*Êý¾Ý¿â·þÎñÆ÷Ö÷»úÃû*/
$SESS_DBNAME = "sessions"; /* Êý¾Ý¿âÃû */
$SESS_DBUSER = "kycman"; /* Êý¾Ý¿âÓû§ */
$SESS_DBPASS = "kycman"; /* Êý¾Ý¿â¿ÚÁî */
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
function sess_open($save_path, $session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;
$dns="pgsql://$SESS_DBUSER:$SESS_DBPASS@$SESS_DBHOST/$SESS_DBNAME";
$SESS_DBH=DB::connect($dns);
if (DB::isError($SESS_DBH)) {
die($SESS_DBH->getMessage());
}
return true;
}
function sess_close() {
$SESS_DBH->disconnect();
return true;
}
function sess_read($key) {
global $SESS_DBH, $SESS_LIFE;
$qry = "SELECT value FROM sessions
WHERE sesskey = '$key' AND expiry > " . time();
$qid = $SESS_DBH->query($qry);
if (list($value) = $qid->fetchRow()) {
return $value;
}
return false;
}
function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;
$expiry = time() + $SESS_LIFE;
$value = addslashes($val);
$qry = "INSERT INTO sessions VALUES ('$key', $expiry, '$value')";
$qid = $SESS_DBH->query($qry);
if (!DB::isError($qid)) {
$qry = "UPDATE sessions SET expiry = $expiry,
value = '$value' WHERE sesskey = '$key' AND expiry > " . time();
$qid = $SESS_DBH->query($qry);
}
return $qid;
}
function sess_destroy($key) {
global $SESS_DBH;
$qry = "DELETE FROM sessions WHERE sesskey = '$key'";
$qid = $SESS_DBH->query($qry);
return $qid;
}
function sess_gc($maxlifetime) {
global $SESS_DBH;
$qry = "DELETE FROM sessions WHERE expiry < " . time();
$qid = $SESS_DBH->query($qry);
return $SESS_DBH->affectedRows();
}
session_set_save_handler("sess_open","sess_close",
"sess_read","sess_write",
"sess_destroy","sess_gc");
?>
¡¡¡¡ËÄ¡¢½áÓï
¡¡¡¡Web·þÎñÆ÷ʹÓõÄHTTPÊÇÒ»ÖÖÎÞ״̬ÐÒ飬¿ÉÓÃCookieºÍ»á»°¹ÜÀí¼¼ÊõÃÖ²¹ÕâÒ»²»×ã¡£ÓÉÓÚCookie¼¼ÊõÓкܴóµÄ¾ÖÏÞÐÔ£¬Ä¿Ç°³£ÓûỰ¹ÜÀí»úÖÆ±£´æÓû§µÄ·ÃÎÊ״̬¡£»á»°¼¼ÊõµÄ²ÉÓ㬲»½ö½â¾öÁË´óÈÝÁ¿»á»°ÐÅÏ¢µÄ´æÈ¡ÎÊÌ⣬¶øÇÒ´ó´ó·½±ãÁËWeb·þÎñÆ÷Ó¦ÓóÌÐòµÄ¿ª·¢¡£ÔÚ³£¼ûµÄÈýÖֻỰ¹ÜÀí»úÖÆÖУ¬»ùÓÚÊý¾Ý¿âµÄ»á»°¹ÜÀí»úÖÆ×îÈÝÒ×À©Õ¹£¬¶Ô·ÃÎÊÁ¿¸ºÔØÄÜÁ¦Ò²½ÏÇ¿¡£