在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 相关文章推荐
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
php 魔术方法使用说明
Oct 20 PHP
PHP 网络开发详解之远程文件包含漏洞
Apr 25 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
PHP微框架Dispatch简介
Jun 12 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
PHP实现微信发红包程序
Aug 24 PHP
PHP面向对象详解(三)
Dec 07 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 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
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
php支付宝接口用法分析
2015/01/04 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
php测试kafka项目示例
2020/02/06 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
JS delegate与live浅析
2013/12/21 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python小进度条显示代码
2019/03/05 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
学习Python需要哪些工具
2020/09/04 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
投标人廉洁自律承诺书
2014/05/26 职场文书
社区禁毒工作方案
2014/06/02 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
事业单位考察材料范文
2014/12/25 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS