文章詳情頁
在PHP3中實現SESSION的功能(一)
瀏覽:46日期:2024-01-01 13:19:47
SESSION函數庫:session.inc.php3 <?php if (!isset($__session_inc__)){ $__session_inc__=1; //require("cookie.inc.php3"); # -------------------------------------------------------------------;;# Session Management v1.0 21.6.1998;;# (c) Wild Karl Heinz <kh.wild@wicom.at>;;#;;# This Include handle Session based variable handling;;#;;# Please feel free and use it. If you make it more functional;;# it would be nice to send me a copy.;;#;;# Don’t forget - Mysql_connect !;;#;;# The database structure;;# Table structure for table ’session’;;#;;# CREATE TABLE session (;;# id int(11) DEFAULT ’0’ NOT NULL auto_increment,;;# sid varchar(20) DEFAULT ’’ NOT NULL,;;# val blob,;;# times timestamp(14),;;# PRIMARY KEY (id),;;# KEY sid (sid),;;# UNIQUE sid_2 (sid);;# );;;#;;# You’ll miss here a cron job to delete the old sessions from db;;# -------------------------------------------------------------------;;// 請注意上面被注釋掉的CREATE TABLE語句, // 你需要在你所使用的數據庫上執行這條語句, // 表名也可以不是session,那么就需要設置下面的$sess_table變量了。 // 此處你需要設置庫名,和表名。 // 不過一般建議就使用session作為表名 $sess_db = ’dbname’;;;$sess_table = ’session’;;;# ----------------------------------------------------;;# Session_CheckID - 檢查、設置并返回 Session-ID;;# 參數......: cookie保存時間(以分鐘計) # 也可不設置表示這個 cookie 只在當前session 有效 # 這其實就象ASP中SESSION的時效一樣。 # 返回值....: 一個唯一的Session-ID (作為cookie存儲) # ----------------------------------------------------;;function Session_CheckID( $min );;{ global $sess_sid;;;if( !$sess_sid ) {;;$sess_sid = uniqid( SC ); //取得一個唯一的隨機數 /* if( $min > 0 ) {;;SetCookie("sess_sid", $sess_sid, time()+($min*60), "/", "", 0 );;;};;else {;;SetCookie("sess_sid", $sess_sid, "", "/", "", 0 );;;};;上面是原先的代碼,會出錯。所以另外用了一個更好的函數。 函數庫:cookie.inc.php3 */ jssetcookie("sess_sid",$sess_sid,$min); return( false );;;};;else {;;return( true );;;};;};;# ----------------------------------------------------------;;# str2arr - 將字符串轉換成session數組 # 參數.....: string # 返回值...: 全局數組(其實就是session);;#本函數用途:將字符串轉換成session數組 #如"session[username]=yourid&session[userpass]=12345" #將會被轉換成下面的數組 # session[username]="yourid" # session[userpass]="12345" #請注意函數split(),each(),list(),eval()的用法。 # ----------------------------------------------------------;;function str2arr( $ts );;{;;global $session;;;$vals = split( "&", $ts );;;while( list($key,$val) = each($vals) ) {;;list( $name, $wert ) = split( "=", $val );;;if( $val ) eval( "$$name = "$wert";" );;;};;};;# ----------------------------------------------------------;;# session_read() - 從SESSION表中取數據,轉換成session數組;;# 參數........: 無 # 返回值......: 如果讀出數據,返回 true ,否則返回 false #注意.........: 用到了str2arr()這個函數 # ----------------------------------------------------------;;function session_read();;{;;# Hash array to keep session-variables;;global $session;;;global $sess_sid, $sess_db, $sess_table, $sess_error;;;$sel = "Select val from $sess_table where sid = ’$sess_sid’";;;$res = mysql_db_query( $sess_db, $sel );;;if( mysql_numrows( $res ) ) {;;$val = mysql_result( $res, 0, "val" );;;str2arr( $val );;;mysql_free_result( $res );;;return( true );;;};;else {;;return( false );;;$sess_error = mysql_error();;;};;};;# ------------------------------------------------------;;# Split_Array() - 將session數組轉換成字符串 # 參數.......: 數組 # 返回值.....: 數組轉換得來的字符串;;#;;# Thanks to Rasmus (這人好象是PHP的發明人) # 注意:將session數組轉換成字符串 #如session[username]="yourid" # session[userpass]="12345" #將會被轉換成"session[username]=yourid&session[userpass]=12345" #同時該函數考慮到了數組的某個元素也是數據的情況 #這個函數被設計成一個遞歸函數 # ------------------------------------------------------;;function Split_Array( $arr, $a = "", $b = "", $c = "" );;{;;while( list( $key, $val ) = each( $arr ) ) {;;if( is_array( $val ) ) {;;$ts .= Split_Array( $arr[ $key ],;;( strlen( $a ) ? $a : $key ),;;( strlen( $b ) ? $b : ( strlen( $a ) ? $key : "" ) ),;;( strlen( $c ) ? $c : ( strlen( $b ) ? $key : "" ) ) );;;};;else {;;$ts .= "session";;;$ts .= $a ? "[$a]" : "";;;$ts .= $b ? "[$b]" : "";;;$ts .= $c ? "[$c]" : "";;;$ts .= "[$key]=$val&";;;};;};;return( $ts );;;};;# ---------------------------------------------------;;# session_write - 將session數組轉換成字符串,再存到session表中;;# 參數.: 無 # 返回值...: 如果存入正常返回 true ,否則返回 false # ---------------------------------------------------;;function session_write();;{;;# Hash array to keep session-variables;;global $session;;;global $sess_sid, $sess_db, $sess_table;;;global $sess_error;;;# if you like to delete a session-cookie;;# you must check it before writting the session;;# array;;if( !$sess_sid ) { session_checkid( 0 ); };;$ts = Split_Array( $session );;;if( $ts > "" ) { $ts = substr( $ts, 0, strlen( $ts ) - 1 ); };;$res = mysql_db_query( $sess_db, "Select * from session where sid = ’$sess_s’");;;if( mysql_numrows( $res ) == 0 ) {;;$sel = "Insert into $sess_table ( id, sid, val, times ) ";;;$sel .= "values( 0, ’$sess_sid’, ’$ts’, NULL )";;;};;else {;;$sel = "Update $sess_table set val = ’$ts’, ";;;$sel .= "times = NULL where sid = ’$sess_sid’";;;};;if( !mysql_db_query( $sess_db, $sel ) ) {;;$sess_error = mysql_error();;;return( false );;;};;else { return( true ); };;};;# ---------------------------------------------;;# session_del - 清除當前所有的session # 并刪除session表中和當前session有關的記錄;;# 參數.....: 一個隨機的session id;;# 返回值...: 無 # ---------------------------------------------;;function session_del();;{;;global $session, $sess_db, $sess_table, $sess_sid;;;$sel = "Delete from $sess_table where sid = ’$sess_sid’";;;if( !mysql_db_query( $sess_db, $sel ) ) {;;$sess_error = mysql_error(); } $sess_sid = ’’; } } ?>;;;原作者:不詳;;
標簽:
PHP
排行榜
