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 相关文章推荐
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
PHP修改session_id示例代码
Jan 08 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
PHP-Java-Bridge使用笔记
Sep 22 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
PHP实现活动人选抽奖功能
Apr 19 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
理解PHP中的stdClass类
2014/04/18 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
js中关于String对象的replace使用详解
2011/05/24 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
Python字符串替换实例分析
2015/05/11 Python
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python3 批量扫描端口的例子
2019/07/25 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Python中url标签使用知识点总结
2020/01/16 Python
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
中英文求职信范文
2014/01/27 职场文书
高校教师岗位职责
2014/03/18 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL