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


Posted in PHP onOctober 09, 2006

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 相关文章推荐
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 PHP
php中常用的预定义变量小结
May 09 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
php数据类型判断函数有哪些
Sep 23 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
分享一则PHP定义函数代码
Feb 26 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
我用php+mysql写的留言本
Oct 09 #PHP
在PHP3中实现SESSION的功能(三)
Oct 09 #PHP
在PHP3中实现SESSION的功能(二)
Oct 09 #PHP
PHP实现网上点歌(二)
Oct 09 #PHP
php上传、管理照片示例
Oct 09 #PHP
我的群发邮件程序
Oct 09 #PHP
模仿OSO的论坛(二)
Oct 09 #PHP
You might like
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
ADODB类使用
2006/11/25 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
用cssText批量修改样式
2009/08/29 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
linux 下selenium chrome使用详解
2020/04/02 Python
Python json转字典字符方法实例解析
2020/04/13 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
Python文件操作的面试题
2013/06/22 面试题
模具专业推荐信
2013/10/30 职场文书
会计应届生的自荐信
2013/12/13 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
技术合作协议书范本
2014/04/18 职场文书
大一学生个人总结
2015/02/15 职场文书
联欢会开场白
2015/06/01 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL