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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
phpmyadmin MySQL 加密配置方法
Jul 05 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
php 定界符格式引起的错误
May 24 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
PHP设计模式之迭代器模式的深入解析
Jun 13 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
实例讲解php将字符串输出到HTML
Jan 27 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异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
python进阶教程之模块(module)介绍
2014/08/30 Python
python实现文本文件合并
2015/12/29 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
Python笔记之facade模式
2019/11/20 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
python 实现超级玛丽游戏
2020/11/25 Python
大学生毕业自我鉴定范文
2013/09/19 职场文书
国企干部对照检查材料
2014/08/22 职场文书
教师辞职信范文
2015/02/28 职场文书
自我推荐信怎么写
2015/03/24 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
AJAX学习笔记
2021/05/18 Javascript
Pandas数据类型之category的用法
2021/06/28 Python