欢迎来到福编程网,本站提供各种互联网专业知识!

在PHP3中实现SESSION的功能(一)

发布时间:2006-10-09 作者: 来源:转载
SESSION函数库:session.inc.php3
SESSION函数库:session.inc.php3

if (!isset($__session_inc__)){

$__session_inc__=1;

//require("cookie.inc.php3");

# -------------------------------------------------------------------

# Session Management v1.0 21.6.1998

# (c) Wild Karl Heinz

#

# 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 = '';

}

}

?>

原作者:不详

相关推荐