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) { //$sess_dbh=mysql_pconnect($hostname,$dbusername,$dbpassword) or die("不能连接数据库!"); // mysql_select_db("$dbname") or die("不能选择数据库!"); function sess_close() { function sess_read($sid) { $result = mysql_query("select data from sesslib where sid=@#$sid@#", $sess_dbh); function sess_write($sid, $sess_data) { function sess_destroy($sid) { $r=mysql_query("delete from sesslib where sid=@#$sid@#", $sess_dbh); function sess_gc($maxlifetime) { $r=mysql_query("delete from sesslib where unix_timestamp(now())-unix_timestamp(time)>$sess_maxlifetime", $sess_dbh); session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc"); ?> |