现在的位置: 首页 >> 数据库 >> MySQL >> 把Session放入MySql
添加时间:2005-8-17 来源:网教中国 作者:
把Session放入MySql


session通常放在/tmp目录下,而该文件夹的权限是everbody可读,这个就非常可怕了!学校的论坛曾经就有人通过session来盗取帐号!所以后来就尝试把session放入数据库,表的结构和过程如下:
//创建表
//create sesslib.sql
CREATE TABLE sesslib (
data text,
time datetime,
id int(11) DEFAULT '0' NOT NULL auto_increment,
sid varchar(32) NOT NULL,
PRIMARY KEY (id),
UNIQUE sid (sid)
);
//End

//XX.php自定义了session的数据库路径,当某个页面需要使用//session时,可以include这个部分,使用方法为:
<?
include "XX.php";//XX.php
session_start();
//以下就可以正常使用session了
?>

/******************************************************/
XX.php 内容:
/*****************************************************/
<?
$sess_dbh="";
$sess_maxlifetime=get_cfg_var("session.gc_maxlifetime");

function sess_open($save_path, $session_name) {
global $hostname, $dbusername, $dbpassword, $dbname, $sess_dbh;

//$sess_dbh=mysql_pconnect($hostname,$dbusername,$dbpassword) or die("不能连接数据库!");
$sess_dbh=mysql_pconnect('localhost','test','test') or die("不能连接数据库!");

// mysql_select_db("$dbname") or die("不能选择数据库!");
mysql_select_db('test') or die("不能选择数据库!");
return(true);
}

function sess_close() {
//mysql_close();
return(true);
}

function sess_read($sid) {
global $sess_dbh;

$result = mysql_query("select data from sesslib where sid='$sid'", $sess_dbh);
$n=mysql_num_rows($result);
if($n==0) {
return("");
}
else {
$sess_data=mysql_result($result,0);
return($sess_data);
}
}

function sess_write($sid, $sess_data) {
global $sess_dbh;
if(!empty($sess_data)){
$r=mysql_query("insert into sesslib set sid='$sid',data='$sess_data',time=now()", $sess_dbh);
if(!$r) { // insertion failed, means the session is already there, update it
$r=mysql_query("update sesslib set sid='$sid', data='$sess_data', time=now() where sid='$sid'",$sess_dbh);
}
return $r;
}}

function sess_destroy($sid) {
global $sess_dbh;

$r=mysql_query("delete from sesslib where sid='$sid'", $sess_dbh);
return($r);
}

function sess_gc($maxlifetime) {
global $sess_dbh, $sess_maxlifetime;

$r=mysql_query("delete from sesslib where unix_timestamp(now())-unix_timestamp(time)>$sess_maxlifetime", $sess_dbh);
return mysql_affected_rows($sess_dbh);
}

session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");

?>

这样一来,安全多了......


上一篇:MySQL中文模糊检索问题的解决方法 下一篇:我的一个php_mysql分页类
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·MySQL数据目录的位置
·新的MySQL安装的安全性
·MySQL服务器的启动和关闭
·使用MYSQL备份数据恢复
·优化MYSQL服务器
·MySQL的DBI/DBD简明安装手册
·MySQL数据库和备份与恢复
·MySQL+Webmin轻松创建数据库
·php新手之mysql分页PageQuery类
·用javabean来实现MySQL的分页显
相关文章
 
最新文章
·MySQL的用途
·一个MYSQL样例数据库
·MYSQL基本数据库术语
·MySQL教程
·MySQL教程之删除或更新现有记录
·与mysql交互的技巧
·MySQL数据类型
·MySQL的列类型
·选择MYSQL列的类型
·MYSQL表达式求值和MYSQL类型转换
Google