<?php
//############################
# 文件:session.php
# 作者:Sanders Yao
# 名称:用户会话
# 所在系统:55w下载
# 功能:多用户会话连接
# 必须全局变量:
# $db:MySQL数据库操作对象(MyDB类型)
# $defaultUser:未登录用户对象
# $domain:session作用域名
# $groupData:用户组缓存数据
# 需要常量:
# SCK_NAM:session发送的cookie名
# SES_EXP:session在服务器端的寿命
# 类型:
# session:
# 会话类型
# user:
# 用户类型
# 全局函数:
# getOnline:
# 返回在线user对象数组
# 最后修改时间:2007-2-27
/* sql:
CREATE TABLE `member` (
`uid` int(10) unsigned NOT NULL auto_increment,
`uname` char(255) NOT NULL,
`password` char(64) NOT NULL,
`ol` tinyint(1) NOT NULL default '0',
`sid` char(6) NOT NULL default '',
`ttl` int(10) NOT NULL default '0',
`gid` mediumint(4) unsigned NOT NULL,
`group` char(255) NOT NULL,
PRIMARY KEY (`uid`),
UNIQUE KEY `uname` (`uname`),
KEY `ol` (`ol`),
KEY `sid` (`sid`)
) TYPE=MyISAM;CREATE TABLE `session` (
`sid` char(6) NOT NULL,
`uid` int(10) NOT NULL default '0',
`uname` char(255) NOT NULL,
`gid` mediumint(4) unsigned NOT NULL,
`group` char(255) NOT NULL,
`ctime` int(10) NOT NULL default '0',
`atime` int(10) NOT NULL default '0',
PRIMARY KEY (`sid`)
) TYPE=HEAP MAX_ROWS=2000;
-- test records:*/
//############################
//会话
class session{
var $itsId;
var $itsCtime;
var $itsAtime;
var $itsUser;
var $itsPerfix;
function session($id = "", $perfix = ""){
$this->itsId = $id;
$this->itsCtime = -1;
$this->itsAtime = -1;
$this->itsUser = NULL;
$this->itsPerfix = $perfix;
}
//加载数据
//返回false:无效的会话id
function load(){
global $db;
if("" == $this->itsId){
return false;
}
$query_string = sprintf("SELECT * FROM `%ssession` WHERE `sid`='%s';", $this->itsPerfix, $this->itsId);
$result = $db->query($query_string);
if(0 == mysql_num_rows($result)){
return false;
}
$arrayTmp = $db->fetch($result, MYSQL_ASSOC);
mysql_free_result($result);
$this->itsUser = new User(0, $this->itsPerfix);
$this->itsUser->itsSession = & $this;
$this->import($arrayTmp);
return true;
}
//加载用户数据(自动登录)
//返回false:登录失败
function loadUser(){
global $db;
$query_string = sprintf("
SELECT * FROM `%smember` WHERE `sid`='%s';", $this->itsPerfix, $this->itsId);
$result = $db->query($query_string);
if(0 == mysql_num_rows($result)){
return false;
}
$arrayTmp = $db->fetch($result, MYSQL_ASSOC);
mysql_free_result($result);
$this->itsUser = new user;
$this->itsUser->import($arrayTmp);
$this->itsUser->itsSession = & $this;
$query_string = sprintf("
UPDATE `%ssession`
SET `uid`=%d, `uname`='%s'
WHERE `sid`='%s';", $this->itsPerfix, $this->itsUser->itsId, $this->itsUser->itsName);
return $db->query($query_string);
}
//导入数据
function import(& $array){
global $defaultUser;
$this->itsId = isset($array["sid"]) ? $array["sid"] : $this->itsId;
$this->itsCtime = isset($array["ctime"])? $array["ctime"] : $this->itsCtime;
$this->itsAtime = isset($array["atime"])? $array["atime"] : $this->itsAtime;
if(0 == $this->itsUser->itsId && "" != $array["uname"]){
$this->itsUser->itsOl = 1;
$this->itsUser->import($array);
}
}
//导出数据
function expert($ignoreId = false){
global $db;
$result = array(
"sid" => $this->itsId,
"ctime" => $this->itsCtime,
"atime" => $this->itsAtime,
);
if($ignoreId){
unset($result["sid"]);
}
return $result;
}
//############################
# 文件:session.php
# 作者:Sanders Yao
# 名称:用户会话
# 所在系统:55w下载
# 功能:多用户会话连接
# 必须全局变量:
# $db:MySQL数据库操作对象(MyDB类型)
# $defaultUser:未登录用户对象
# $domain:session作用域名
# $groupData:用户组缓存数据
# 需要常量:
# SCK_NAM:session发送的cookie名
# SES_EXP:session在服务器端的寿命
# 类型:
# session:
# 会话类型
# user:
# 用户类型
# 全局函数:
# getOnline:
# 返回在线user对象数组
# 最后修改时间:2007-2-27
/* sql:
CREATE TABLE `member` (
`uid` int(10) unsigned NOT NULL auto_increment,
`uname` char(255) NOT NULL,
`password` char(64) NOT NULL,
`ol` tinyint(1) NOT NULL default '0',
`sid` char(6) NOT NULL default '',
`ttl` int(10) NOT NULL default '0',
`gid` mediumint(4) unsigned NOT NULL,
`group` char(255) NOT NULL,
PRIMARY KEY (`uid`),
UNIQUE KEY `uname` (`uname`),
KEY `ol` (`ol`),
KEY `sid` (`sid`)
) TYPE=MyISAM;CREATE TABLE `session` (
`sid` char(6) NOT NULL,
`uid` int(10) NOT NULL default '0',
`uname` char(255) NOT NULL,
`gid` mediumint(4) unsigned NOT NULL,
`group` char(255) NOT NULL,
`ctime` int(10) NOT NULL default '0',
`atime` int(10) NOT NULL default '0',
PRIMARY KEY (`sid`)
) TYPE=HEAP MAX_ROWS=2000;
-- test records:*/
//############################
//会话
class session{
var $itsId;
var $itsCtime;
var $itsAtime;
var $itsUser;
var $itsPerfix;
function session($id = "", $perfix = ""){
$this->itsId = $id;
$this->itsCtime = -1;
$this->itsAtime = -1;
$this->itsUser = NULL;
$this->itsPerfix = $perfix;
}
//加载数据
//返回false:无效的会话id
function load(){
global $db;
if("" == $this->itsId){
return false;
}
$query_string = sprintf("SELECT * FROM `%ssession` WHERE `sid`='%s';", $this->itsPerfix, $this->itsId);
$result = $db->query($query_string);
if(0 == mysql_num_rows($result)){
return false;
}
$arrayTmp = $db->fetch($result, MYSQL_ASSOC);
mysql_free_result($result);
$this->itsUser = new User(0, $this->itsPerfix);
$this->itsUser->itsSession = & $this;
$this->import($arrayTmp);
return true;
}
//加载用户数据(自动登录)
//返回false:登录失败
function loadUser(){
global $db;
$query_string = sprintf("
SELECT * FROM `%smember` WHERE `sid`='%s';", $this->itsPerfix, $this->itsId);
$result = $db->query($query_string);
if(0 == mysql_num_rows($result)){
return false;
}
$arrayTmp = $db->fetch($result, MYSQL_ASSOC);
mysql_free_result($result);
$this->itsUser = new user;
$this->itsUser->import($arrayTmp);
$this->itsUser->itsSession = & $this;
$query_string = sprintf("
UPDATE `%ssession`
SET `uid`=%d, `uname`='%s'
WHERE `sid`='%s';", $this->itsPerfix, $this->itsUser->itsId, $this->itsUser->itsName);
return $db->query($query_string);
}
//导入数据
function import(& $array){
global $defaultUser;
$this->itsId = isset($array["sid"]) ? $array["sid"] : $this->itsId;
$this->itsCtime = isset($array["ctime"])? $array["ctime"] : $this->itsCtime;
$this->itsAtime = isset($array["atime"])? $array["atime"] : $this->itsAtime;
if(0 == $this->itsUser->itsId && "" != $array["uname"]){
$this->itsUser->itsOl = 1;
$this->itsUser->import($array);
}
}
//导出数据
function expert($ignoreId = false){
global $db;
$result = array(
"sid" => $this->itsId,
"ctime" => $this->itsCtime,
"atime" => $this->itsAtime,
);
if($ignoreId){
unset($result["sid"]);
}
return $result;
}
//返回false:发送cookie失败
function connect($sck_expi = 0){
$this->createId();
$sck_expi = 0 == $sck_expi ? 0 : time() + $sck_expi;
return @setcookie($this->itsPerfix . SCK_NAM, $this->itsId, $sck_expi, "", $domain);
}
//通过用户返回的cookie加载会话数据
//返回false:无效的cookie值 或者 更新session表失败
function check(){
global $_COOKIE, $db;
if(isset($_COOKIE[$this->itsPerfix . SCK_NAM])){
$this->itsId = $_COOKIE[$this->itsPerfix . SCK_NAM];
if(!$this->load()){
return false;
}
$query_string = sprintf("
UPDATE `%ssession`
SET `atime`=UNIX_TIMESTAMP()
WHERE `sid`='%s';", $this->itsPerfix, $this->itsId);
$result = $db->query($query_string);
return $result;
}
return false;
}
//构造session的唯一id
//返回false:构造失败
function createId(){
global $db, $defaultUser;
set_time_limit(60);//
$this->itsCtime = $this->itsAtime = time();
$this->setDefault();
for($i = 0;$i < 1000;$i ++){//循环1000次
$this->itsId = randomStr(6);
$query_string = sprintf("
INSERT INTO`%ssession`
(`sid`, `uid`, `uname`, `ctime`, `atime`, `gid`, `group`)
VALUES('%s', %d, '%s', %d, %d, %d, '%s');"
, $this->itsPerfix, $this->itsId, $this->itsUser->itsId, $this->itsUser->itsName
, $this->itsCtime, $this->itsAtime, $this->itsUser->itsGid, $this->itsUser->itsGroup);
$db->setOnError();//关闭错误中断输出开关
$result = $db->query($query_string);
$db->setOnError("die");//开启错误中断输出开关
if($result){
break;
}
if(1000 == $i){
return false;
}
return true;
}
}
//设定为默认用户
function setDefault(){
global $defaultUser;
$this->itsUser = & $defaultUser;
$defaultUser->itsSession = & $this;
}
}//构造随机字符串
//模仿Discuz!的函数 ;P
function randomStr($num, $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"){
mt_srand((double)microtime() * 1000000);
$hash = "";
$max = strlen($chars) - 1;
for($i = 0;$i < $num;$i ++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}//刷新会话
function refreshSession($sessPerfix){
global $db;
//回收资源
$query_string = sprintf("DELETE FROM `%ssession` WHERE `atime`+%d<UNIX_TIMESTAMP();", $sessPerfix, SES_EXP);
$db->query($query_string);
//清理过期用户session
$query_string = sprintf("UPDATE `%smember` SET `sid`='', `ttl`=0 WHERE `ttl`<UNIX_TIMESTAMP() AND `ttl`!=0;", $sessPerfix);
$db->query($query_string);
}//获取在线用户
function getOnline($userPerfix){
global $db;
$query_string = sprintf("SELECT * FROM `%smember` WHERE `ol`=1;", $userPerfix);
$result = $db->query($query_string);
$num = mysql_num_rows($result);
$arrayUser = array();
for($i = 0;$i < $num;$i ++){
$tmpUser = new user;
$tmpUser->import($db->fetch($result, MYSQL_ASSOC));
$arrayUser[$tmpUser->itsId] = $tmpUser;
}
return $arrayUser;
}
//用户
class user{
var $itsId;
var $itsName;
var $itsOl;
var $itsSession;
var $itsGid;
var $itsGroup;
var $itsPower;
var $itsPerfix;
function user($id = 0, $perfix = ""){
$this->itsId = $id;
$this->itsName = "";
$this->itsGid = 0;
$this->itsGname = "";
$this->itsOl = 0;
$this->itsSession = NULL;
$this->itsPerfix = $perfix;
}
//导入数据
function import(& $array){
global $groupData;
$this->itsId = isset($array["uid"]) ? $array["uid"] : $this->itsId;
$this->itsName = isset($array["uname"])? $array["uname"] : $this->itsName;
$this->itsGid = isset($array["gid"]) ? $array["gid"] : $this->itsGid;
$this->itsGroup = isset($array["group"])? $array["group"] : $this->itsGroup;
$this->itsOl = isset($array["ol"]) ? $array["ol"] : $this->itsOl;
if(isset($array["gid"]) && isset($groupData[$array["gid"]])){
$this->itsPower = $groupData[$array["gid"]]["power"];
$this->itsGroup = $groupData[$array["gid"]]["group"];
}
}
//登录
//返回false:登录失败
function login($name, $psw, $ttl = 0){
global $db;
if(NULL == $this->itsSession){
return false;
}
$query_string = sprintf("
SELECT * FROM `%smember`
WHERE `uname`='%s' AND `password`=md5('%s');"
, $this->itsPerfix, $name, $psw);
$result = $db->query($query_string);
if(1 != mysql_num_rows($result)){
return false;
}
$this->import($db->fetch($result, MYSQL_ASSOC));
$this->itsOl = 1;
mysql_free_result($result);
//mysql版本>4.0.4
$query_string = sprintf("
UPDATE `%ssession`, `%smember`
SET `%ssession`.`uid`=%d, `%ssession`.`uname`='%s', `%smember`.`ol`=1, `%smember`.`sid`='%s'
WHERE `%ssession`.`sid`='%s' AND `%smember`.`uid`='%s';"
, $this->itsPerfix, $this->itsPerfix
, $this->itsPerfix, $this->itsId, $this->itsPerfix, $this->itsName, $this->itsPerfix, $this->itsPerfix, $this->itsSession->itsId
, $this->itsPerfix, $this->itsSession->itsId, $this->itsPerfix, $this->itsId);
$result = $db->query($query_string);
if(mysql_affected_rows($db->itsLink)){
return $result;
}
return false;
}
//注册
function register($psw){
global $db;
if("" == $this->itsName || 255 < strlen($this->itsName)){
return false;
}
$query_string = sprintf("
INSERT INTO `%smember`(`uname`, `password`)
VALUES ('%s', md5('%s'));", $this->itsPerfix, $this->itsName, $psw);
$db->errorHandle();
$result = $db->query($query_string);
$db->errorHandle("die");
return $result;
}
}
?>
怎么放进去用??请给简单的说一下
谢谢