上一篇 | 下一篇

把Session放入MySql

发布: 2008-7-01 11:49 | 作者: admin | 来源: | 查看: 0次

把Session放入MySql

【字体:小 大】

把Session放入MySql

作者:不详 文章来源:网络 点击数:129 更新时间:2007-1-21

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");

?>

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

[责任编辑:电脑技巧]

字号: | 推荐给好友

评分:0

我来说两句