PHP用mysql数据库存储session的代码


Posted in PHP onMarch 05, 2010

隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当于没有了。
隐患二:session在php中默认的是以文件的形式保存在一个临时文件夹里面的,对于一个小型系统来说,这样做完全可以,
可是对于一个大型而又被经常访问的系统来说,就不是很好的办法了。假设这个网站一天有1000个人访问。一个月以后session的临时文件夹就会有30000个临时文件。想象一下计算机要从30000里面找一条session_sid是一个多么漫长的事情呀!
因此为了提高效率。
交易使用用数据库保存session。具体方法如下:
1.更改php.ini文件。
由于php默认保存session的方式是files所以我们要改变它。即:找到“session.save_handler = files”将“files”改为“User”。
把session的模式改成用户自定义的。
2.建立数据库:
CREATE TABLE `db_session` (
`sesskey` char(32) NOT NULL,
`expiry` int(11) unsigned NOT NULL,
`value` text NOT NULL,
PRIMARY KEY (`sesskey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
[/code]
数据库表明:db_session
列名:sesskey,expiry,value 其中:sesskey为主键。
Value里面存放着session里面的值。
3.建立session_mysql.php文件。这个文件是用来构造保存session的方法的。修改一下参数直接使用就可以了。
session_mysql.php
PHP代码:

<?php 
$gb_DBname="db_myBBS";//数据库名称 
$gb_DBuser="root";//数据库用户名称 
$gb_DBpass="23928484";//数据库密码 
$gb_DBHOSTname="localhost";//主机的名称或是IP地址 
$SESS_DBH=""; 
$SESS_LIFE=get_cfg_var("session.gc_maxlifetime");//得到session的最大有效期。 
function sess_open($save_path,$session_name){ 
global $gb_DBHOSTname,$gb_DBname,$gb_DBuser,$gb_DBpass,$SESS_DBH; 
if(!$SESS_DBH=mysql_pconnect($gb_DBHOSTname,$gb_DBuser,$gb_DBpass)){ 
echo "<li>MySql Error:".mysql_error()."<li>"; 
die(); 
} 
if(!mysql_select_db($gb_DBname,$SESS_DBH)){ 
echo "<li>MySql Error:".mysql_error()."<li>"; 
die(); 
} 
return true; 
} 
function sess_close(){ 
return true; 
} 
function sess_read($key){ 
global $SESS_DBH,$SESS_LIFE; 
$qry="select value from db_session where sesskey = '$key' and expiry > ".time(); 
$qid=mysql_query($qry,$SESS_DBH); 
if(list($value)=mysql_fetch_row($qid)){ 
return $value; 
} 
return false; 
} 
function sess_write($key,$val){ 
global $SESS_DBH,$SESS_LIFE; 
$expiry=time()+$SESS_LIFE; 
$value=$val; 
$qry="insert into db_session values('$key',$expiry,'$value')"; 
$qid=mysql_query($qry,$SESS_DBH); 
if(!$qid){ 
$qry="update db_session set expiry=$expiry, value='$value' where sesskey='$key' and expiry >".time(); 
$qid=mysql_query($qry,$SESS_DBH); 
} 
return $qid; 
} 
function sess_destroy($key){ 
global $SESS_DBH; 
$qry="delete from db_session where sesskey = '$key'"; 
$qid=mysql_query($qry,$SESS_DBH); 
return $qid; 
} 
function sess_gc($maxlifetime){ 
global $SESS_DBH; 
$qry="delete from db_session where expiry < ".time(); 
$qid=mysql_query($qry,$SESS_DBH); 
return mysql_affected_rows($SESS_DBH); 
} 
session_module_name(); 
session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc"); 
?>

4.建立测试文件。
在使用之前必须引用刚刚建立的session_mysql.php文件。
session_test.php
PHP代码:
<?php 
include ("session_mysql.php"); 
session_start(); 
$_SESSION['abc']= "A: I will be back!"; 
$_SESSION['meto']= "B: Me too "; 
$_SESSION['name']= "louis "; 
echo "<a href=\"get_session_test.php\">click me</a>"; 
?>

get_session_test.php
<?php 
include ("session_mysql.php"); 
session_start(); 
echo $_SESSION['abc']; 
echo "<br>"; 
echo $_SESSION['meto']; 
echo "<br>"; 
echo $_SESSION['name']; 
$_SESSION['wq']="12e"; 
echo "<br><a href=\"get_session_test2.php\">click again</a>"; 
?>

get_session_test2.php
<?php 
include ("session_mysql.php"); 
session_start(); 
echo $_SESSION['abc']; 
echo "<br>"; 
echo $_SESSION['meto']; 
echo "<br>"; 
echo $_SESSION['name']; 
echo "<br>"; 
echo $_SESSION['wq']; 
//session_destroy();//用来销毁所有session的函数。 
?>
PHP 相关文章推荐
写php分页时出现的Fatal error的解决方法
Apr 18 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
php版本的cron定时任务执行器使用实例
Aug 19 PHP
PHP生成树的方法
Jul 28 PHP
Yii数据库缓存实例分析
Mar 29 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
iis 7下安装laravel 5.4环境的方法教程
Jun 14 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
PHP 采集程序原理分析篇
Mar 05 #PHP
PHP 一个页面执行时间类代码
Mar 05 #PHP
一步一步学习PHP(8) php 数组
Mar 05 #PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 #PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 #PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 #PHP
PHP MVC模式在网站架构中的实现分析
Mar 04 #PHP
You might like
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
PHP令牌 Token改进版
2008/07/18 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
微信小程序日历效果
2018/12/29 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
创业计划书六个要素
2013/12/26 职场文书
会计与审计毕业生自荐信范文
2013/12/30 职场文书
xxx同志考察材料
2014/02/07 职场文书
项目投资建议书
2014/05/16 职场文书
食品工程专业求职信
2014/06/15 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
家长意见书
2015/06/04 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL