在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入门速成教程
Mar 19 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
php记录日志的实现代码
Aug 08 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
Feb 04 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
php检测图片木马多进制编程实践
2013/04/11 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
解决laravel session失效的问题
2019/10/14 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
这段js代码得节约你多少时间
2011/12/20 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
对python中dict和json的区别详解
2018/12/18 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
python 图像增强算法实现详解
2021/01/24 Python
塔吉特百货公司官网:Target
2017/04/27 全球购物
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
中学生校园广播稿
2014/01/16 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
交通安全主题班会
2015/08/12 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS