<?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.
#
# dont 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)
# );
#
# youll 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 = ;
}
}
?>