把Session放入MySql

2016-02-19 14:09 8 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐把Session放入MySql,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】

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了

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

/******************************************************/
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;
}}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

来源:http://www.tulaoshi.com/n/20160219/1606274.html

延伸阅读
标签: PHP
二、php3,4中session的实现 在php3中是没有session这种东东的,但我们又需要,怎么办呢?别急,有很多人替你做了这些,这其中最有名的要算phplib了。你可以去国外下载,可以上国内大部分php站点下载。我们要做的第一件事是让phplib和php3结合在一起使它能工作。为了能实现这方面的功能,我们需要先安装phplib。跟着我来做,...
标签: PHP
三、session应用举例 以下这些例子片断仅供参考,你可以定制也可以不定制session,随你便 (1)用于用户认证 <? session_start(); $dbh = mysql_connect("localhost:3306","xxxx","xxxx"); mysql_select_db("znsoft");//选择数据库 $query="select userid from reguser w...
标签: PHP
抛开cookie使用session PHP中SESSION不能跨页传递问题的解决办法   在PHP中使用过SESSION的朋友可能会碰到这么一个问题,SESSION变量不能跨页传递。这令我苦恼了好些日子,最终通过查资料思考并解决了这个问题。我认为,出现这个问题的原因有以下几点: 1、客户端禁用了cookie 2、浏览器出现问题,暂时无法存取cookie 3...
标签: Web开发
写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便。但是你真的知道 Session 的运作原理吗?或许了解以后,你就再也不太敢使用这个令人又爱又恨的对象。虽然转而替代之的方法稍嫌麻烦,但在长期考量之下,也就不得不这么做了。 首先来讲讲 Session 的好处,它可以用来记...
由于系统自带的MySQL默认字符集不是gbk,因此给数据库的推广应用以及中文程序的开发带来极大的不便,在没完没了的GBK和UTF8的转换过程中消耗了我们无数的精力以及系统的资源。   先将让slack支持中文,然后重新编译MySQL,原来系统MySQL的要先卸载: login:root shell removepkg mysql shell groupadd mysql shell cd /app shell mkdir...

经验教程

32

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部