分享
 
 
 

多服务器共享session(mysql)

王朝学院·作者佚名  2009-09-29
窄屏简体版  字體: |||超大  

PHP代码

<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */

//===========================================

// 程序: mysql-Based Session Class

// 功能: 基于mysql存储的 Session 功能类

// 作者: yejr

// 网站: http://imysql.cn

// 时间: 2007-01-05

//===========================================

/**

* 类名: MySQL Session Class

* 功能: 自主实现基于MySQL HEAP表存储的 Session 功能

* 描述: 这个类就是实现Session的功能,基本上是通过设置客户端的Cookie来保存SessionID,

* 然后把用户的数据保存在服务器端,最后通过Cookie中的Session Id来确定一个数据是否是用户的,

* 然后进行相应的数据操作

*

* 注意: 本类调用了PEAR::DB类,如果有自己的DB类,则可以稍微修改一下代码

*

* 备注:数据表初始化SQL语句:

* CREATE TABLE `sessions` (

* `sid` varchar(32) NOT NULL default '',

* `session` longtext,

* `flush_dt` int unsigned NOT NULL default '0',

* PRIMARY KEY (`sid`),

* KEY `last` (`flush_dt`)

* ) ENGINE=HEAP;

*/

//设定 SESSION 有效时间,单位是 秒

define('SESS_LIFTTIME', 3600);

define('DB_DSN', 'mysql://root:@localhost/test');

define('DB_NAME','test');

require_once('DB.php');

$gDb = new DB;

$gDb = DB::connect(DB_DSN, TRUE);

if (PEAR::isError($gDb))

{

die($gDb->getMessage());

}

if (!defined('MySQLSession'))

{

define('MySQLSession', TRUE);

class Usess

{

static $mSessSavePath;

static $mSessName;

static $mSessMaxTime;

static $mTblSess = 'sessions';

static $mTblSessMap;

static $mDb;

// {{{ 初始化构造函数

/**

* 构造函数

*

* @param string $login_user 登录用户

* @param int $login_type 用户类型

* @param string $login_sess 登录Session值

* @return Esession

*/

public function __construct()

{

self::$mSessMaxTime = SESS_LIFTTIME;

self::$mTblSessMap = array(

'sid' => 'sid',

'data' => 'session',

'last' => 'flush_dt',

);

}

// }}}

/** {{{ sessOpen($pSavePath, $name)

*

* @param String $pSavePath

* @param String $pSessName

*

* @return Bool TRUE/FALSE

*/

public function sessOpen($pSavePath = '', $pSessName = '')

{

global $gDb;

self::$mDb = $gDb;

self::$mSessSavePath = $pSavePath;

self::$mSessName = $pSessName;

self::sessGc();

return TRUE;

}

// }}}

/** {{{ sessClose()

*

* @param NULL

*

* @return Bool TRUE/FALSE

*/

public function sessClose()

{

return TRUE;

}

// }}}

/** {{{ sessRead($wSid)

*

* @param String $wSid

*

* @return Bool TRUE/FALSE

*/

public function sessRead($wSid = '')

{

global $db;

$wSql = sprintf("SELECT * FROM `%s`.`%s` WHERE `%s` = '%s';",

DB_NAME,

self::$mTblSess,

self::$mTblSessMap['sid'],

$wSid

);

//这里一定要用 DB_FETCHMODE_ASSOC,否则取回的数组只能用数字做下标

if (!PEAR::isError($row = self::$mDb->getRow($wSql, null, DB_FETCHMODE_ASSOC)))

{

//session已经存在了

if (is_array($row) && 1 <= count($row))

{

return $row[self::$mTblSessMap['data']];

}

else

{

$wSql = sprintf("INSERT INTO `%s`.`%s` VALUES ('%s', '', UNIX_TIMESTAMP(NOW()));",

DB_NAME,

self::$mTblSess,

$wSid

);

if (!PEAR::isError(self::$mDb->query($wSql)))

{

return TRUE;

}

}

}

return FALSE;

}

// }}}

/** {{{ sessWrite($wSid, $wData)

*

* @param String $wSid

* @param String $wData

*

* @return Bool TRUE/FALSE

*/

public function sessWrite($wSid = '', $wData = '')

{

$wData = mysql_escape_string($wData);

$wSql = sprintf("UPDATE `%s`.`%s` SET `%s` = '%s', `%s` = UNIX_TIMESTAMP(NOW()) WHERE `%s` = '%s';",

DB_NAME,

self::$mTblSess,

self::$mTblSessMap['data'],

$wData,

self::$mTblSessMap['last'],

self::$mTblSessMap['sid'],

$wSid

);

if (!PEAR::isError(self::$mDb->query($wSql)))

{

return TRUE;

}

return FALSE;

}

// }}}

/** {{{ sessDestroy($wSid)

*

* @param String $wSid

*

* @return Bool TRUE/FALSE

*/

public function sessDestroy($wSid = '')

{

$wSql = sprintf("DELETE FROM `%s`.`%s` WHERE `%s` = '%s';",

DB_NAME,

self::$mTblSess,

$wSid

);

if (!PEAR::isError(self::$mDb->query($wSql)))

{

return TRUE;

}

return FALSE;

}

// }}}

/** {{{ sessGc()

*

* @param NULL

*

* @return Bool TRUE/FALSE

*/

public function sessGc()

{

global $db;

//计算出过期时间

$last = time() - self::$mSessMaxTime;

$wSql = sprintf("DELETE FROM `%s`.`%s` WHERE `%s` < $last;", DB_NAME, self::$mTblSess, self::$mTblSessMap['last']);

if (!PEAR::isError(self::$mDb->query($wSql)))

{

return TRUE;

}

return FALSE;

}

// }}}

/** {{{ initSess()

*

* @param NULL

*

* @return Bool TRUE/FALSE

*/

public function initSess()

{

$domain = '';

//不使用 GET/POST 变量方式

ini_set('session.use_trans_sid', 0);

//设置垃圾回收最大生存时间

ini_set('session.gc_maxlifetime', SESS_LIFTTIME);

//使用 COOKIE 保存 SESSION ID 的方式

ini_set('session.use_cookies', 1);

ini_set('session.cookie_path', '/');

//多主机共享保存 SESSION ID 的 COOKIE

ini_set('session.cookie_domain', $domain);

//将 session.save_handler 设置为 user,而不是默认的 files

session_module_name('user');

//定义 SESSION 各项操作所对应的方法名:

session_set_save_handler(

array('Usess', 'sessOpen'), //对应于静态方法 My_Sess::open(),下同。

array('Usess', 'sessClose'),

array('Usess', 'sessRead'),

array('Usess', 'sessWrite'),

array('Usess', 'sessDestroy'),

array('Usess', 'sessGc')

);

session_start();

return TRUE;

}

// }}}

}//end class

}//end define

$sess = new Usess;

$sess->initSess();

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有