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

5年以前  |  阅读数:487 次  |  编程语言:PHP 

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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例