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 和 COM
Oct 09 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 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实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php单例模式示例分享
2015/02/12 PHP
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
javascript基本语法
2016/05/31 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
python 实现插入排序算法
2012/06/05 Python
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python中的异常处理简明介绍
2015/04/13 Python
详谈python http长连接客户端
2017/06/12 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
使用python远程操作linux过程解析
2019/12/04 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
应届毕业生的自我鉴定
2013/11/13 职场文书
陈欧广告词
2014/03/14 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
订货会邀请函
2015/01/31 职场文书
《青山不老》教学反思
2016/02/22 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书