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 相关文章推荐
怎样在UNIX系统下安装php3
Oct 09 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
destoon二次开发入门示例
Jun 20 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
php ajax数据传输和响应方法
Aug 21 PHP
php下的原生ajax请求用法实例分析
Feb 28 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+DBM的同学录程序(5)
2006/10/09 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
Prototype Class对象学习
2009/07/19 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
nodejs初始化init的示例代码
2018/10/10 NodeJs
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
django初始化数据库的实例
2018/05/27 Python
Django models.py应用实现过程详解
2019/07/29 Python
学习Python列表的基础知识汇总
2020/03/10 Python
python selenium操作cookie的实现
2020/03/18 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
新闻学专业应届生求职信
2013/11/08 职场文书
电子专业推荐信范文
2013/11/18 职场文书
五一活动标语
2014/06/30 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
档案工作个人总结
2015/03/03 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
我的收音机情缘
2022/04/05 无线电
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers