这个SESSION类, 是以ADODB 来操作
数据库的.
SESSION,经常用在后台验证, PHP默认是存在
文件里的. 但最好存到
数据库中,
这样可以
解决如: 1 跨站访问 2 一个帐号同一时间只能由一人
登陆 3 可很方便统计
在线人数
现在就开工了.
首先 你得将php.ini
session.save_handler = files 改成 session.save_handler = user 指示
服务器将SESSION数据存在数据库中.
如果你是虚拟
空间的话, 就没有
设置权限了, 可以在PHP文件中用如下语句修改:
-
- ini_set('session.save_handler', 'user');
第二步:session表 表结构如下:
-
- CREATE TABLE `system_session` (
- `s_id` varchar(255) NOT NULL default '',
- `s_expire` int(10) unsigned NOT NULL default '0',
- `user_id` int(10) unsigned NOT NULL default '0',
- `user_ip` varchar(15) NOT NULL default '',
- `user_act` varchar(20) NOT NULL default '',
- `user_code` varchar(20) NOT NULL default '',
- `s_data` mediumtext NOT NULL,
- PRIMARY KEY (`s_id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=gbk;
s_id session_id
s_expire session到期时间
s_data session 的内容
以下是我在网站中自定义的数据
user_id
user_ip
.......
第三步:实现
功能
.........
新建一个test.php 文件 输入如下代码:
主要是:
1
实例化ADODB数据库类,
2 实例化sessionDb类
下面的代码新手应该也看得懂.就是得到一个ADODB的实例
-
- //数据库
- $C_DB = array();
- $C_DB['type'] = "mysql";
- $C_DB['host'] = "localhost";
- $C_DB['user'] = "root";
- $C_DB['password'] = "";
- $C_DB['dbname'] = "test";
- //数据库类(adodb)
- require_once($C_DIR['lib']."adodb/adodb.inc.php");
- //连数据库
- $CONN = &ADONewConnection($C_DB['type']);
- $CONN->Debug = $C_DB['debug'];
- if( !$CONN->Connect($C_DB['host'],$C_DB['user'],$C_DB['password'],$C_DB['dbname']) )
- {
- die("连接不上数据库");
- }
- $CONN->SetFetchMode(ADODB_FETCH_ASSOC);
- $CONN->Execute("SET NAMES gbk");
- //建session
- //指示 将SESSION存入数据库
- ini_set('session.save_handler', 'user');
- //实例化SESSION类
- require_once($C_DIR['func']."session.php");
- /*
- array(
- 'conn' => adodb连接类实例
- 'table' => session 存在哪个表里
- );
- */
- new sessionDb(array(
- 'conn' => $CONN,
- 'table' => 'system_session'
- ));
sessionDb 类 如下:
- class sessionDb
- {
- //ADODB数据连接
- var $conn;
- //要操作的表
- var $table = 'system_session';
- //关键字
- var $primaryKey = 's_id';
- //session数据
- var $data;
- //
- function sessionDb($config)
- {
- $this->__construct($config);
- }
- function __construct($config)
- {
- $this->init($config);
- session_set_save_handler(array(&$this, 'cOpen'),
- array(&$this, 'cClose'),
- array(&$this, 'cRead'),
- array(&$this, 'cWrite'),
- array(&$this, 'cDestroy'),
- array(&$this, 'cGc'));
- session_name('test');
- session_cache_limiter('private, must-revalidate');
- session_start();
- }
- function init($config)
- {
- foreach ((array)$config as $k => $v)
- {
- if (!$v)
- {
- continue;
- }
- $this->$k = $v;
- }
- $this->config = $config;
- return true;
- }
- function cOpen($save_path,$s_id)
- {
- return true;
- }
- function cClose()
- {
- return true;
- }
- function cRead($s_id)
- {
- $now_time = time();
- $sql = "SELECT s_data FROM {$this->table} WHERE {$this->primaryKey}='$s_id' AND s_expire>$now_time";
- $rs = $this->conn->Execute($sql);
- if(!$rs || $rs->EOF)
- {
- return "";
- }
- else
- {
- return $rs->fields['s_data'];
- }
- return "";
- }
- function cWrite($s_id,$s_data)
- {
- $rec = $this->getData($s_id, $s_data);
- $sql = "SELECT {$this->primaryKey} FROM {$this->table} WHERE {$this->primaryKey}='$s_id'";
- $rs = $this->conn->Execute($sql);
- if(!$rs || $rs->EOF)
- {
- $rec[$this->primaryKey] = $s_id;
- $this->conn->AutoExecute("{$this->table}",$rec,"INSERT");
- if($this->conn->Affected_Rows())
- {
- return true;
- }
- }
- else
- {
- $this->conn->AutoExecute("{$this->table}",$rec,"UPDATE","{$this->primaryKey}='$s_id'");
- if($this->conn->Affected_Rows())
- {
- return true;
- }
- }
- return false;
- }
- function cDestroy($s_id)
- {
- $sql = "DELETE FROM {$this->table} WHERE {$this->primaryKey}='$s_id'";
- $this->conn->Execute($sql);
- if($this->conn->Affected_Rows())
- {
- return true;
- }
- return false;
- }
- function cGc($life_time)
- {
- $now_time = time();
- $sql = "DELETE FROM {$this->table} WHERE s_expire < $now_time";
- $this->conn->Execute($sql);
- return intval($this->conn->Affected_Rows());
- }
- //写入session的数据,可根据需要修改
- function getData($s_id, $s_data)
- {
- global $C_SYS;
- //$this->conn = getConn();
- $C_SYS['login_expire'] = !intval($C_SYS['login_expire']) ? 30 : $C_SYS['login_expire'];
- $expire = time() + $C_SYS['login_expire'] * 60;
- $rec = array();
- //session的有效期
- $rec['s_expire'] = $expire;
- //session 数据
- $rec['s_data'] = $s_data;
- //其它自定义数据
- $rec['user_id'] = isset($GLOBALS['U_ENV']['user_id']) ? $GLOBALS['U_ENV']['user_id'] : '';
- $rec['user_ip'] = isset($GLOBALS['U_ENV']['ip']) ? $GLOBALS['U_ENV']['ip'] : '';
- $rec['user_act'] = isset($GLOBALS['ACT']) ? $GLOBALS['ACT'] : '';
- $rec['user_code'] = isset($GLOBALS['CODE']) ? $GLOBALS['CODE'] : '';
- return $rec;
- }
- }
阅读(171) | 评论(0) | 转发(0) |