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调用数据库的存贮过程
Oct 09 PHP
PHP数据类型的总结分析
Jun 13 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
php命名空间设计思想、用法与缺点分析
Jul 17 PHP
php探针使用原理和技巧讲解
Sep 17 PHP
php利用ZipArchive类操作文件的实例
Jan 21 PHP
PHP7新特性
Mar 09 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
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
PDO::exec讲解
2019/01/28 PHP
mongodb和php的用法详解
2019/03/25 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
一句话JavaScript表单验证代码
2009/08/02 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
JS如何监听div的resize事件详解
2020/12/03 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
地球物理学专业推荐信
2014/09/08 职场文书
岳庙导游词
2015/02/04 职场文书
鲁迅故里导游词
2015/02/05 职场文书