Return Homepage Cooltang's Box
Homepage Article Title session‘S‹³’ö(“ñ)
Catalog Original URL http://66.102.9.104/search?q=cache:Kkt52RD-jIQJ:www.phpe.net/articles/149.shtml+php+session.use_cookies&hl=zh-CN&lr=lang_zh-CN|lang_zh-TW
Backup Time 2004-5-22 9:39:22
Executor IP 168.209.98.35

session‘S‹³’ö(“ñ)


 

“ñAphp3,4’†session“I实现 

Ýphp3’†¥–v—Lsession这种东东“IC’A‰ä们–”Žù—vCœƒ么办呢H别‹}C—Lœk‘œl‘Ö你˜ô—¹这±C这‘Ž’†Å—L–Œ“I—vŽZphplib—¹B你‰ÂˆÈ‹Ž‘ŠO‰º载C‰ÂˆÈã‘“à‘å•”•ªphp⋓_‰º载B‰ä们—v˜ô“I‘æˆêŒŽ–¥让phplib˜aphp3结‡Ýˆê‹NŽg›€”\HìB为—¹”\实现这•û–Ê“IŒ÷”\C‰ä们Žù—væˆÀ‘•phplibBæî’…‰ä—ˆ˜ôCœk—eˆÕ“I(ˆÈ‰º•û–@Ýwin2000+php3.0.16+apache1.3.12+phplib7.2c+mysql3.23.21 for win32 ã’Ê过)phplibÅŠî–{“IŒ÷”\•—p户认证CSessionŠÇ—C权ŒÀ‹y”˜库“I’ŠÛ‰»B

œƒ样Žg—pphplib—ˆ实现sessionŒ÷”\呢?

ˆêAŽñæ你«phplib‰ð开C—¢–Ê—Lˆê˜¢–Ú录‹©"php",«这˜¢–Ú录‰贝“žapache“IˆÀ‘•–Ú录‰ºBˆÈ笔ŽÒ“IŠ÷Ší为—á:‰ä“IapacheˆÀ‘•Ýd:/apache–Ú录‰º,‰ä«ã–Ê“I"php"–Ú录‰贝“žd:a/pache,›ó«phplib‰º“Ipages –Ú录‰º“I•¶Œ˜a–Ú录ˆê‹N‰贝“ž  d:/apache/htdocs‰ºC’ˆÓ•s带–Ú录–{gBphplib“I类库Žù—vª˜Œn统进s‰Žn‰»C你‰ÂˆÈC‰ülocal.inc•¶ŒC‘Ž’†•ïŠÜ’…ˆê±Šî–{ŽQ”C你‰ÂˆÈª˜Ž©ŒÈŠ÷Ší“I实际î™v—ˆ进sC‰üB «d:/apache/php/prepend.php3•¶Œ’†“Iˆê’i’ö˜‰ü为”@‰º样ŽqF 

if (!isset($_PHPLIB) or !is_array($_PHPLIB)) { 
 $_PHPLIB["libdir"] = "d:/apache/php/"; //这™X‰ü为你•úphplib‰ºphp–Ú录“I˜HŒa 

‘R@«d:/apache/php/local.inc•¶Œ‰ü”@‰º: 

class DB_Example extends DB_Sql { 
 var $Host = "localhost";//你“Imysql”˜库ŠÝŽåŠ÷–Œ 
 var $Database = "test";//”˜库–Œ 
 var $User = "root";//”˜库—p户–Œ 
 var $Password = "";//”˜库—p户Œû—ß 

Å@ˆê步执s‰ð开“Iphplib–Ú录’†“Istuff–Ú录‰º“Icreate_database.mysql•¶Œ,¶¬‰Žn•\B‰ä们说–Ÿˆê‰ºphplib“IHìŒŽ—C每ˆê˜¢Žg—pphplib“I页–ÊŽñæ•K须‰ÂˆÈQ“ž运sphplibŠ•K须类库•¶ŒC‰ä们‰ÂˆÈÝphp3.ini’†设’uauto_prepend变—Ê—ˆŽxŽCphplib•ª发•ï’†•ïŠÜˆê˜¢prepend.php3•¶ŒC«auto_prependŽw’è"d:/apache/php/prepend.php3"(带ˆø†)@CŠe页–ʏA‰ïŽ©动•ïŠÜphplib类库C‰ä们还‰ÂˆÈ«phplib类库ŠÝ–Ú录‰Á进include变—Ê’†CˆÈ•։ˆȝQ“ž这±•¶ŒC“–‘RCÅ苯“I办–@A¥Žw’èphplib“I绝对˜HŒaC这‰Â•s¥˜¢DŽåˆÓ,‰ÂˆÚA«‘Ÿ·I

‘æ“ñ步C每ˆê˜¢Žg—pphplib“I页–Ê’†C你•K须Žñæ调—ppage_open”Ÿ”进s‰Žn‰»B这‰ï诉phplibC你现Ýˆœ«—ˆ‰ï—p“žó态•Û‘¶Bˆê˜¢“TŒ^“I 
page_open—áŽq”@‰ºF

<?php 
page_open(array("sess" => "Example_Session")); 
?> 

”组变—Ê(sess)—p—ˆ‰Žn‰»ˆê±ó态•Û‘¶对ÛC’ˆÓF•K须Žg—pphplib“à’u–Œ(sess)C这±“à’u–Œ¥你Ýlocal.ini’†Š’è义“ICpage_open”Ÿ”•K须Ý页–Ê“à—e输o“ž浏览Ší”V‘O”í调—pBphp3‹r–{Å@应ˆÈpage_close()结‘©C这«‰ï«—L关ó态”˜ŽÊ‰ñ“ž”˜库’†C”@‰Ê你–Y—¹“I话C结‰Ê你应该”\‘z“ž,™û™ûC你“I变—Ê‘S丢—¹,‰Â•s—v‰ö‰ä–v诉你... 

ˆö为phplibŽg—p—¹Cookies—ˆ•Û‘¶ó态M‘§CŠˆÈpage_open()”Ÿ”•K须Ý页–Ê“à—e输o“ž浏览Ší”V‘O”í调—pC 这—¢“I页–Ê“à—e‰ÂˆÈ¥”C‰œHTMLM‘§ˆœŽÒ‹ósC”@‰Ê你发现—¹错误"Oops - SetCookie called after header has been sent"C这•\–ŸÝpage_open()”V‘OŒü浏览Ší输o—¹±Y么C你—v“Á别—¯ˆÓ‹ósCˆö为”ñí难Q“žC“TŒ^“I错误¥Ý<? ˜a ? >标记”V间输o—¹‹ósC你应检查Ýlocal.inc˜aprepend.php3•¶Œ’†¥”Û•ïŠÜ—¹‹ósC这–琥ˆê˜¢”ñí—eˆÕo错“I’n•ûB为—¹减­o错“I‰Â”\,‰ä们‰ÂˆÈ这样书ŽÊ‰Žn‰»’ö˜: 
<? 
page_open(array("sess" => "Example_Session")); 
?> 
<html> 
..... 
</html> 

‘æŽO步C‹ï‘ÌŽg—pB 
“–ˆê˜¢—p户访问—¹该ã€â‹@C‘Š—p户“IsessionA开Žn—¹C”@‰Ê—p户“I浏览ŠíŽxŽcookie“I话C«‰ïŒš—§ˆê˜¢session“Iid•ú“ücookieC这˜¢—Bˆê“IID¥—RPHP3Š÷¶¬C‘R@–”—pŠ÷种ŽqŽš‹ø进smd5‰Á–§过—¹“IC这—¢“Icookie应该‹©˜ôsession cookieCˆö为这˜¢cookie¥•s‰ïŽÊ“ž—p户d盘—¢‹Ž“IC“–ˆê˜¢sessionŠú结‘©“I时ŒóC该cookie–ç”튮结—¹B”@‰Ê—p户浏览Ší•sŽxŽcookie“I话C“ß么 该session“Iid«‰ï•ú“üurl链’†Cˆö为¥‰Á–§过“ICŠˆÈÞŽæ—¹–ç–v—pBsession ID‘¶•ú’…—p户“I—L关M‘§C”@—p户›ß认证A认证“žŠú时间A—p户权ŒÀC˜a‘Ž‘Œˆê±你‰Â”\Žù—v“IM‘§C•û•Ö‰ä们Žæ—pBSession‘Ž实A¥—p户ˆêŽŸ‰ï话“I过’öBSession›ó•s¥仅仅—p—ˆæîçH—p户“I’™eC实际ãC›€还‰ÂˆÈ—L‘Ž›€“IŽg—p场‡C你‰ÂˆÈ—p›€—ˆ‘¶储”C‰œ你‘z—v‘¶贮“IM‘§C这±M‘§‰ÂˆÈÝ—p户@访问“I页–Ê’†”hã—p场C“–‘R‘O’ñ¥“ߍ±页–Ê—vŽg—pPHPLIBB•û–@œk简单C’™eˆê˜¢变—ʍ@‘Š‰ÂÝ@“I页–Ê’†Žg—p›€C’ŒŽŠsession结‘©B•û–@F 
<?php $sess->register( "variable_name"); ?> 

’ˆÓC这—¢“Ivariable_name•s¥变—Ê值Cާ¥变—Ê–ŒC‰ÂˆÈæŽw’è变—Ê–ŒC@Ä赋值B你Ý–^˜¢页–Ê’†‰ÂˆÈ‰ü变变—Ê“I值C@“I页–Ê访问该变—ʉ“ž‰ü变@“I值B变—Ê“I类Œ^¥‘œ样“IC‰ÂˆÈ¥ˆê˜¢Žš‹øCˆê˜¢”ŽšCˆê˜¢”组B举—á—ˆ说–ŸF

‘æˆê页: 
<?php 
page_open(array("sess" => "Example_Session")); 
$sess->register( "first"); //’ˆÓ变—Ê–Œ‘O•sŽù—v‰Á$ 
if (iset($firstname)) { 
$first = $firstname; 

..... 
page_close(); 
?> 

‘æ“ñ页: 
<?php 
page_open();//开Žnsession 


echo $first;//ŠÅŠÅÁ‰Ê 

page_close();//•Û‘¶ó态M‘§ 
?> 

’™eŠ®ˆê˜¢变—ʁC“–页–ʍō@调—ppage_close()”Ÿ”@CŠe˜¢session变—ʉï”íŽÊ‰ñ“ž”˜库’†B”@‰Ê你–Y记调—ppage_close()”Ÿ”“I话C变—ʏA•s‰ï”íŽÊ‰ñ”˜库C«o现•s‰Â预’m“I@‰ÊB“–变—Ê”íŽg—pŠ®毕C你•sÄŽù—v—p“ž时C‰ÂˆÈ调—pˆÈ‰º”Ÿ”«变—Ê删œF

<?php 
page_open(array("sess" => "Example_Session")); 
... 
$sess->unregister( "variable_name"); 
... 
page_close(); 
?> 

PHPLIB 7.0’†CŽg—p—¹ˆê种‘¶储结构C›€ˆò许你‘¶储session”˜“ž”˜库’†A‹€‹“à‘¶’†ˆœŽÒLDAP’†BPHPLIBŽg—p—¹”˜库类C这Žg“Ÿ你—L—¹X‘œ“I选择,你‰ÂˆÈ选—poracle8,mysql,postgresql“™“™”˜库—ˆ•Û‘¶ó态M‘§B 

关˜°phplib’†“I‘Ž›€Œ÷”\ˆÈ‹y—L关session“I‘Ž›€”Ÿ”“IŽg—pC你‰ÂˆÈŽQŠÅ›€带“IŽè™e,ˆœã›€“Iã€â‹ŠÅÝ线•¶žƒB›€“I˜V‰ÆÝhttp://phplib.netuse.de/index.php3 Bphp4“Isession实现‘å“s˜žphplibŠw—ˆ“IC›€–çèÏcookies•Û‘¶session id,—p•¶ŒŒn统•Û‘¶变—Ê(àÒ认î™v‰º)BˆöŸC›€“Isession变—Ê•s”\•Û‘¶对Û(Ž–实ã”\•Û‘¶对Û“à—eC’A–v—LˆÓ义Cˆö为›€¥•Û‘¶ÝŽ¥盘ã“IC•s¥Šˆ“I对ÛC[‘Ž—Ê–çA¥对Û›™‘́B)•s过这“_“IŒÀ§•s¥‘Ÿ‘åC‰ä们Ý‘å•”•ªî™v‰º“s‘üŽù—v•Û‘¶变—ʏAs—¹B“–‘R你–ç‰ÂˆÈ«session•Û‘¶Ý”˜库’†,‰ºˆê¬节’†‰ä们‰ï讲“žœƒ样«session•Û‘¶Ý”˜库’†BÝphp4’†—R˜°”äphp3‘œ—¹sessionŽxŽCŠˆÈÝphp.ini•¶Œ’†–瑜—¹session”z’u选项B‰º–ʉä们—ˆŠÅŠÅŠe项“Iì—p—^ˆÓ义: 

[Session] 
session.save_handler = files ; handler used to store/retrieve data(—pY么•Û‘¶session变—Ê,àÒ认î™v‰º—p•¶Œ) 
session.save_path = c:/temp ; argument passed to save_handler(•Û‘¶session变—Ê“I–Ú录CÝlinux/unix‰º为/tmp,Ýwin‰º设为你“I–Ú录) 
; in the case of files, this is the 
; path where data files are stored 
session.use_cookies = 1 ; whether to use cookies(¥”ÛŽg—pcookies,“–‘RCÝwin‰º别Ù选择) 
session.name = PHPSESSID 
; name of the session(àÒ认sessionŽg—p“Icookies–Œ,Œš议•s—v‰ü动) 
; is used as cookie name 
session.auto_start = 0 ; initialize session on request startup(¥”ÛŽ©动启—psession,“–为1时CÝ每页’†A‰ÂˆÈ•s•K调—psession_start()”Ÿ”—¹) 
session.cookie_lifetime = 0 ; lifetime in seconds of cookie(设’è cookie ‘—“ž浏览Ší@“I•Û‘¶时间C单ˆÊ为•bB㞏È值为 0C•\ŽŠ’Œ“ž浏览Ší关闭B) 
; or if 0, until browser is restarted 
session.cookie_path = / ; the path the cookie is valid for(cookie)(cookies—LÁ˜HŒa) 
session.cookie_domain = ; the domain the cookie is valid for(cookies—LÁˆæ–Œ) 
session.serialize_handler = php ; handler used to serialize data(’è义˜—ñ‰»”˜“I标识C–{Œ÷”\‘ü—L WDDX –Í块ˆœ PHP “à•”Žg—pB㞏È值为 php
; php is the standard serializer of PHP 
session.gc_probability = 1 ; percentual probability that the (设’è每ŽŸ临时•¶Œ开Žn处— (gc, garbage collection) 处—ŠT—ЁB㞏È值为 1B ) 
; 'garbage collection' process is started 
; on every session initialization 
session.gc_maxlifetime = 1440 ; after this number of seconds, stored(设’è•Û‘¶session“I临时•¶Œ”퐎œ‘O“I‘¶Šˆ•b”) 
; data will be seen as 'garbage' and 
; cleaned up by the gc process 
session.referer_check = ; check HTTP Referer to invalidate (™r’èŽQÆ“ž‹q户’[“ISession ‘ã码¥”Û—v删œB—L时ÝˆÀ‘Sˆœ‘Ž›€l虑时C‰ï设’è•s删œB㞏È值为 0B) 
; externally stored URLs containing ids 
session.entropy_length = 0 ; how many bytes to read from the file(设’è session ˜ž‚熵值资Œ¹读Žæ“IˆÊ”B㞏È值为 0.) 
session.entropy_file = ; specified here to create the session id(设’è session ‘ã码Œš—§时CŽg—pŠO•”‚熵值资Œ¹ˆœ•¶Œ—ˆŒš—§C—á”@ UNIX Œn统ã“I /dev/random  ˆœ /dev/urandomB ) 
; session.entropy_length = 16 
; session.entropy_file = /dev/urandom 
session.cache_limiter = nocache ; set to { nocache,private,public } to (设’èsession缓™tŒÀ§) 
; determine HTTP caching aspects 
session.cache_expire = 180 ; document expires after n minutes(•¶žƒ—LÁŠú,单ˆÊ为•ª钟)

Ýwindows•œ‘䉺Cphp4.01pl2ˆÈ‘O“I”Å–{‰ïo现设’usession.save_path @o错“Iî™vC这¥php“Iˆê˜¢bug,Ýphp4.01pl2‹yˆÈ@›ß经C³—¹B”@‰Ê你—pˆÈ‘O“I”Å–{C你‰ÂˆÈ«session.save_path设为"./",ˆœ设为"/temp",›óÝ你•ú’uphp‹r–{“I“–‘O盘ª–Ú录‰ºŒšˆê˜¢–Œ为temp“I–Ú录‘ЉÂ(‰ä“Iphp‹r–{•úÝd:apachehtdocs‰ºC则‰äÝd:盘ª–Ú录‰ºŒšˆê–Œ为temp“I–Ú录)B 
Ýphp4’†—L关session“I”Ÿ”Žå—v—LˆÈ‰º这±F 

session_start: ‰Žn‰»session,Žù—v—psession“I每ˆê˜¢页–ʍÅ开Žn处调—pB 
session_destroy: 结‘© session,ÝŽù—v结‘©session处调B 
session_name: ‘¶Žæ–Ú‘O session –ŒÌB 
session_module_name: ‘¶Žæ–Ú‘O session –Í块B 
session_save_path: ‘¶Žæ–Ú‘O session ˜HŒaB 
session_id: ‘¶Žæ–Ú‘O session id†B 
session_register: ’™eV“Isession变—ʁB 
session_unregister: 删œ›ß’™esession变—ʁB 
session_is_registered: 检查session变—ʐ¥”Û’™eB 
session_decode: Session ”˜‰ð码B 
session_encode: Session ”˜‰Á–§B 

’ʏíî™v‰º‰ä们‘üŽù—v调—pŽO˜¢”Ÿ”‘Š‰ÂB 
‘Šsesssion_start()Asession_register()Asession_is_registered()B 
ÝŽù—v—p“žsession“I每ˆê页“IÅ开Žn处调—psession_start()”Ÿ”C 
ˆê˜¢“TŒ^“IŽg—psession“I页–Ê”@‰ºF 
<?session_start()?> 
<html> 
.... 
<body> 
<? 
$var="hello"; 
session_register("var");//’™e$var变—ʁC’ˆÓ–v—L$•„† 


if(session_is_registered("var"))//检查变—ʐ¥”Û’™e 
echo "haha,’™e—¹!"; 
else 
echo "sorry,还–v—L’™e!"; 

?> 
</body> 
</html>


php4’†session处—“I’萧 

‰ä们Žù—v扩[6˜¢”Ÿ”C“–‘R这±”Ÿ”•sŽù你‹Ž调—pC对‰ä们—ˆ说¥“§–Ÿ“IB

这™{˜¢”Ÿ”¥: 
sess_open($sess_path, $session_name); 

这˜¢”Ÿ””ísession处—’ö˜调—p—ˆì‰Žn‰»HìBŽù—v传给›€“I两˜¢ŽQ”¥$sess_path,›€对应你“Iphp.ini•¶Œ’†“Isession.save_path选项;$session_name,›€对应php.ini’†“Isession.name 选项B›€们‹ï‘Ìœƒ样Hì,请ŠÅ‰º–Ê“I—áŽqB 

sess_close(); 

这˜¢”Ÿ”Ý页–Ê结‘©执s›óŠŽsession处—’ö˜Žù—v关闭时”í调—pB(’ˆÓC•s—v˜asess_destory¬ŸÀ—¹,›€¥—p—ˆ结‘©session“I) 

sess_read($key); 

这˜¢”Ÿ”Ýsession处—’ö˜读ŽæŽw’èsession键值($key)时B 
这˜¢”Ÿ”检õ›ó•Ô‰ñ标识为$key“Isession”˜.(’ˆÓF你•s—p’SSœƒ样˜—ñ‰»˜a”œ˜—ñ‰»”˜,”@‰Ê你•s’m“¹这¥Y么ˆÓŽvC•s—v’SS›€) 

译ŽÒ’F˜—ñ‰»¥«变—ʈœ对ÛÝ’ö˜结‘©ˆœŽù—v时•Û‘¶Ý•¶Œ’†CÝ‰ºŽŸ’ö˜运sˆœŽù—v时Ä
调“ü“à‘¶“I‹Z术,—L别˜°‘ü•Û‘¶”˜“I•û–@B 

sess_write($key, $val); 

这˜¢”Ÿ”˜Ýsession处—’ö˜Žù—v«”˜•Û‘¶时调—p,这种î™v经íÝ你“I’ö˜结‘©时发¶B›€负责«”˜•Û‘¶Ý‰ºŽŸ”\—psess_read($key)”Ÿ”检õ“I’n•ûB 

sess_destroy($key); 

这˜¢”Ÿ”ÝŽù—vÁ毁session时B›€负责删œsession›óŠŽŽœ环‹«B 


sess_gc($maxlifetime); 
这˜¢”Ÿ”负责Ž—áê•ЁBÝ这种î™v‰ºC›€负责删œ过时“Isession”˜Bsession处—’ö˜‰ï‹ô尔调—p›€们B 

现Ý‰ä们›ß经Ž‘^—¹‰ä们’ñ‹Ÿ“I”Ÿ”B 

’萧’ö˜‰ÂˆÈ—pmysql”˜库ˆœDBM•¶Œ•Û‘¶session”˜BŽæ™r˜°你“IŽù—vB 
”@‰Ê你™r’èŽg—pmysqlìŽxŽC“ߎù—vìˆÈ‰ºHì: 

Žñæ‰ä们Ýmysql’†创Œšˆê˜¢sessions”˜库C›óŠŽ创Œšˆê˜¢sessions•\Bæ运s你“Imysql‹q户’[›óŠŽ执s‰º–Ê“I–œ—߁F 
mysql> CREATE DATABASE sessions; 

mysql> GRANT select, insert, update, dele ON sessions.* TO phpsession@localhost 
-> IDENTIFIED BY 'phpsession'; 

mysql> CREATE TABLE sessions ( 
-> sesskey char(32) not null, 
-> expiry int(11) unsigned not null, 
-> value text not null, 
-> PRIMARY KEY (sesskey) 
-> ); 

‰ºˆê步,C‰üsession_mysql.php•¶Œ“I$SESS_DB* 变—ÊŽg‘Ž•C”z你Š÷Šíã“I”˜库设’uB 

(œk•øŸ]C—R˜°”Å权ŒŽˆöC‰ä•s”\”cˆÈ‰º‘ã码’†“I‰p•¶‹Ž{C‘üD‰Á±’释—¹ 
================================================================================== 
<? 
/* ------------------------------------------------------------------------ 
* session_mysql.php 
* ------------------------------------------------------------------------ 
* PHP4 MySQL Session Handler 
* Version 1.00 
* by Ying Zhang (ying@zippydesign.com
* Last Modified: May 21 2000 

* ------------------------------------------------------------------------ 
* TERMS OF USAGE: 
* ------------------------------------------------------------------------ 
* You are free to use this library in any way you want, no warranties are 
* expressed or implied. This works for me, but I don't guarantee that it 
* works for you, USE AT YOUR OWN RISK. 

* While not required to do so, I would appreciate it if you would retain 
* this header information. If you make any modifications or improvements, 
* please send them via email to Ying Zhang <ying@zippydesign.com>. 

* ------------------------------------------------------------------------ 
* DESCRIPTION: 
* ------------------------------------------------------------------------ 
* This library tells the PHP4 session handler to write to a MySQL database 
* instead of creating individual files for each session. 

* Create a new database in MySQL called "sessions" like so: 

* CREATE TABLE sessions ( 
* sesskey char(32) not null, 
* expiry int(11) unsigned not null, 
* value text not null, 
* PRIMARY KEY (sesskey) 
* ); 

* ------------------------------------------------------------------------ 
* INSTALLATION: 
* ------------------------------------------------------------------------ 
* Make sure you have MySQL support compiled into PHP4. Then copy this 
* script to a directory that is accessible by the rest of your PHP 
* scripts. 
* 确M你“Iphp4—LmysqlŽxŽC‘R@”c这˜¢‹r–{‰贝“ž˜a你“Iphp‹r–{—L关“I–Ú录B 
* ------------------------------------------------------------------------ 
* USAGE:iŽg—p•û–@j 
* ------------------------------------------------------------------------ 
* Include this file in your scripts before you call session_start(), you 
* don't have to do anything special after that. 
* •ïŠÜ这˜¢•¶Œ“ž你—vŽg—psession“I•¶Œ’†C•K须Ý调—psession_start()”V‘OC”Û则, 
* ‰ïœkŽS“IC•s—v‰ö‰ä–v诉你B 这样A•sŽù—vÄ˜ôY么Hì—¹,还˜a你ˆÈ‘O—psession“I•û–@ˆê样B 
*/ 

$SESS_DBHOST = "localhost"; /* database server hostname */ 
$SESS_DBNAME = "sessions"; /* database name */ 
$SESS_DBUSER = "phpsession"; /* database user */ 
$SESS_DBPASS = "phpsession"; /* database password */ 

$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; 

if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) { 
echo "<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER"; 
echo "<li>MySQL Error: ", mysql_error(); 
die; 

if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) { 
echo "<li>Unable to select database $SESS_DBNAME"; 
die; 

return true; 

function sess_close() { 
return true; 

function sess_read($key) { 
global $SESS_DBH, $SESS_LIFE; 

$qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time(); 
$qid = mysql_query($qry, $SESS_DBH); 

if (list($value) = mysql_fetch_row($qid)) { 
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 = mysql_query($qry, $SESS_DBH); 

if (! $qid) { 
$qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey 
= '$key' AND expiry > " . time(); 
$qid = mysql_query($qry, $SESS_DBH); 

return $qid; 

function sess_destroy($key) { 
global $SESS_DBH; 

$qry = "DELETE FROM sessions WHERE sesskey = '$key'"; 
$qid = mysql_query($qry, $SESS_DBH); 

return $qid; 

function sess_gc($maxlifetime) { 
global $SESS_DBH; 

$qry = "DELETE FROM sessions WHERE expiry < " . time(); 
$qid = mysql_query($qry, $SESS_DBH); 

return mysql_affected_rows($SESS_DBH); 

session_set_save_handler( 
"sess_open", 
"sess_close", 
"sess_read", 
"sess_write", 
"sess_destroy", 
"sess_gc"); 
?> 
================================================================= 
’萧Žg—pdbm•¶Œ时“IÚŒû 
================================================================= 
<? 
/* ------------------------------------------------------------------------ 
* session_dbm.php 
* ------------------------------------------------------------------------ 
* PHP4 DBM Session Handler 
* Version 1.00 
* by Ying Zhang (ying@zippydesign.com
* Last Modified: May 21 2000 

* ------------------------------------------------------------------------ 
* TERMS OF USAGE: 
* ------------------------------------------------------------------------ 
* You are free to use this library in any way you want, no warranties are 
* expressed or implied. This works for me, but I don't guarantee that it 
* works for you, USE AT YOUR OWN RISK. 

* While not required to do so, I would appreciate it if you would retain 
* this header information. If you make any modifications or improvements, 
* please send them via email to Ying Zhang <ying@zippydesign.com>. 

* ------------------------------------------------------------------------ 
* DESCRIPTION: 
* ------------------------------------------------------------------------ 
* This library tells the PHP4 session handler to write to a DBM file 
* instead of creating individual files for each session. 

* ------------------------------------------------------------------------ 
* INSTALLATION: 
* ------------------------------------------------------------------------ 
* Make sure you have DBM support compiled into PHP4. Then copy this 
* script to a directory that is accessible by the rest of your PHP 
* scripts. 
* 确M你“Iphp4—LDBMŽxŽB‰贝这˜¢•¶ŒÝ你“Iphp‹r–{–Ú录B 
* ------------------------------------------------------------------------ 
* USAGE: 
* ------------------------------------------------------------------------ 
* Include this file in your scripts before you call session_start(), you 
* don't have to do anything special after that. 
* Ý调—psession_start()”V‘O请•ïŠÜ这˜¢•¶ŒB”V@A•sŽù—vìY么Hì—¹B 
*/ 

$SESS_DBM = ""; 
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); 

function sess_open($save_path, $session_name) { 
global $SESS_DBM; 

$SESS_DBM = dbmopen("$save_path/$session_name", "c"); 
return ($SESS_DBM); 

function sess_close() { 
global $SESS_DBM; 

dbmclose($SESS_DBM); 
return true; 

function sess_read($key) { 
global $SESS_DBM, $SESS_LIFE; 

$var = ""; 
if ($tmp = dbmfetch($SESS_DBM, $key)) { 
$expires_at = substr($tmp, 0, strpos($tmp, "„ ")); 

if ($expires_at > time()) { 
$var = substr($tmp, strpos($tmp, "„ ") + 1); 

return $var; 

function sess_write($key, $val) { 
global $SESS_DBM, $SESS_LIFE; 

dbmreplace($SESS_DBM, $key, time() + $SESS_LIFE . "„ " . $val); 
return true; 

function sess_destroy($key) { 
global $SESS_DBM; 

dbmdele($SESS_DBM, $key); 
return true; 

function sess_gc($maxlifetime) { 
global $SESS_DBM; 

$now = time(); 
$key = dbmfirstkey($SESS_DBM); 
while ($key) { 
if ($tmp = dbmfetch($SESS_DBM, $key)) { 
$expires_at = substr($tmp, 0, strpos($tmp, "„ ")); 
if ($now > $expires_at) { 
sess_destroy($key); 

$key = dbmnextkey($SESS_DBM, $key); 

session_set_save_handler( 
"sess_open", 
"sess_close", 
"sess_read", 
"sess_write", 
"sess_destroy", 
"sess_gc"); 
?>

================================================================= 
‹ï‘Ìœƒ么—pA•s—p‘œ说—¹Cˆö为这±”Ÿ”“s¥phpˆøúÌ调—p“IC—^‰ä们Ù关“IB‰ä们‘üŽùÆãq”z
’u@As—¹C你—p“I还¥ˆÈ‘O“Isession”Ÿ”B 
ŠÅŠÅ‰º–Ê“I‘ã码A’m“¹—¹Fj 


session’萧“I测试‘ã码 
================================================================== 
<? 
/* ------------------------------------------------------------------------ 
* test.php 
* ------------------------------------------------------------------------ 
* PHP4 Customer Session Handler Test Script 
* Version 1.00 
* by Ying Zhang (ying@zippydesign.com
* Last Modified: May 21 2000 
*/ 

/* default to DBM handler */ 
if (! isset($handler)) { 
$handler = "dbm"; 

/* default action is increment */ 
if (! isset($action)) { 
$action = "increment"; 

/* load up the appropriate session handling script, depending on the handler */ 
if ($handler == "dbm") { 
include("session_dbm.php"); 

} elseif ($handler == "mysql") { 
include("session_mysql.php"); 

} else { 
echo "<li>Unrecognized handler ($handler)"; 
die; 

/* start the session and register a simple counter */ 
session_start(); 
session_register("count"); 

/* figure out what we should do, depending on the action */ 
switch ($action) { 
case "increment" : 
$count = isset($count) ? $count + 1 : 0; 
break; 

case "destroy" : 
session_destroy(); 
break; 

case "gc" : 
$maxlife = get_cfg_var("session.gc_maxlifetime"); 
sess_gc($maxlife); 
break; 

default: 
echo "<li>Unknown action ($action)"; 
break; 

?> 

<h1>Session Test Script</h1> 
<ul> 
<li>Handler: <b><?=$handler?></b> 
<li>Action: <b><?=$action?></b> 
<li>Count: <b><?=$count?></b> 
</ul> 

<hr size=1> 
<form> 
<table> 
<tr> 
<td>Handler:</td> 
<td> 
<select name="handler"> 
<option value="dbm">DBM</option> 
<option value="mysql">MySQL</option> 
</select> 
</td> 
</tr> 
<tr> 
<td>Action:</td> 
<td> 
<select name="action"> 
<option value="increment">Increment</option> 
<option value="destroy">Session Destroy</option> 
<option value="gc">Force Garbage Collection</option> 
</select> 
</td> 
</tr> 
<tr> 
<td></td> 
<td><br><input type="submit"></td> 
</tr> 
</table> 
</form>

Visit Cooltang's Homepage TOP