在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 相关文章推荐
[FAQ]PHP中的一些常识:类篇
Oct 09 PHP
简单的用PHP编写的导航条程序
Oct 09 PHP
第十三节--对象串行化
Nov 16 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
php 文件上传系统手记
Oct 26 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
PHP 网络开发详解之远程文件包含漏洞
Apr 25 PHP
php实现插入排序
Mar 29 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
php压缩文件夹最新版
Jul 18 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
Terran兵种对照表
2020/03/14 星际争霸
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP模板解析类实例
2015/07/09 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
Python实现的HTTP并发测试完整示例
2020/04/23 Python
python实现简单购物商城
2016/05/21 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
鱼油专家:Omegavia
2016/10/10 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
升职自荐书范文
2013/11/28 职场文书
秋菊打官司观后感
2015/06/03 职场文书
MYSQL如何查看操作日志详解
2022/05/30 MySQL