在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+dbfile开发小型留言本
Oct 09 PHP
PHP实时显示输出
Oct 02 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
php遍历目录方法小结
Mar 10 PHP
twig模板常用语句实例小结
Feb 04 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 PHP
Laravel框架生命周期与原理分析
Jun 12 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
其他功能
2006/10/09 PHP
10个简化PHP开发的工具
2014/12/25 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
拖拉表格的JS函数
2008/11/20 Javascript
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
node跨域请求方法小结
2017/08/25 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
python连接mysql并提交mysql事务示例
2014/03/05 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
python实现银行管理系统
2019/10/25 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
某公司的.net工程师面试题笔试题
2013/11/22 面试题
linux面试题参考答案(4)
2013/01/28 面试题
农村面貌改造提升实施方案
2014/03/18 职场文书
学习党代会心得体会
2014/09/05 职场文书
毕业典礼致辞
2015/07/29 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
小学教代会开幕词
2016/03/04 职场文书
创业计划书详解
2019/07/19 职场文书
了解Redis常见应用场景
2021/06/23 Redis
解决xampp安装后Apache无法启动
2022/03/21 Servers
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers