+ -
当前位置:首页 → 问答吧 → 自己写的一个SESSION存入数据库的类

自己写的一个SESSION存入数据库的类

时间:2008-03-31

来源:互联网

最近在做一个ajax chat项目,要用到session存入数据库.以便能方便的实时查看在线会员...及跨域session传值..参考了网上的步骤


session.sql

CREATE TABLE IF NOT EXISTS `session` (
  `id` varchar(32) NOT NULL,
  `time` int(10) NOT NULL,
  `timenow` int(10) NOT NULL,
  `data` text NOT NULL,
  `ip` varchar(15) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

session.class.php
复制PHP内容到剪贴板
PHP代码:

<?php 
class session
{
 public $db;
 public $maxtime=600;
 function __construct()
 {
  session_set_save_handler(array(&$this, 'openSession'),
        array(&$this, 'closeSession'),
        array(&$this, 'readSession'),
        array(&$this, 'writeSession'),
        array(&$this, 'destroySession'),
        array(&$this, 'gcSession'));
  session_name('test');
  session_cache_limiter('private, must-revalidate');
  session_start();
 }

 function openSession()
 {
  global $db;
  $this->db=$db;
  //下面的代码是因为当在window环境下.老是不进行gcSession操作,所以干脆写到把清除失效session放到open里
  $time=time()-$this->maxtime;
  $this->db->del("delete from `session` where `timenow`<'$time'");
  return true;
 }
 function closeSession()
 {
  unset($this->db);
  return true;
 }
 function readSession($id)
 {
  if($session=$this->db->getfirst("select * from `session` where `id`='$id'")){
   return $session;
  }else{
   return '';
  }
 }
 function writeSession($id,$data)
 {
  $ip=getip();
  $time=time();
  if($session=$this->db->getfirst("select `id` from `session` where `id`='$id'")){
   $this->db->update("update `session` set `data`='$data',`ip`='$ip',`timenow`='$time' where `id`='$id' ");
   return true;
  }else{
   $this->db->insert("insert into `session` (`id`,`data`,`ip`,`time`,`timenow`) values ('$id','$data','$ip','$time','$time')");
   return true;
  }
 }
 function destroySession($id) { 
  if($this->db->del("delete from `session` where `id`='$id'")){
   return true; 
  }else{
   return false;
  }
 } 

 function gcSession($maxlifetime) 
 {
  $time=time()+$this->maxtime;
  if($this->db->del("delete from `session` where `nowtime`<'$time'")){
   return true; 
  }else{
   return false;
  }
 }
}
require_once('db_class.php');
$db_username="root"; 
$db_password="root"; 
$db_database="chat"; 
$db_hostname="192.168.0.17";
$db=new dbClass($db_username,$db_password,$db_database,$db_hostname);
$db->connect();
$db->select();
mysql_query("set names 'utf8'") ;
$session=new session();

//使用方法,在需要用到session的页面第一行直接require一下就行了
?>

db_class.php
复制PHP内容到剪贴板
PHP代码:

<?php
class dbClass{ //开始数据库类
var $username;
var $password;
var $database;
var $hostname;
var $result;
function dbClass($username,$password,$database,$hostname){
$this->username=$username;
$this->password=$password;
$this->database=$database;
$this->hostname=$hostname;
}
function connect(){ //这个函数用于连接数据库
$this->link=mysql_connect($this->hostname,$this->username,$this->password) or die("Sorry,can not connect to database");
return $this->link;
}
function select(){ //这个函数用于选择数据库
mysql_select_db($this->database,$this->link);
}
function query($sql){ //这个函数用于送出查询语句并返回结果,常用。
if($this->result=mysql_query($sql,$this->link)) return $this->result;
else {
//这里是显示SQL语句的错误信息,主要是设计阶段用于提示。正式运行阶段可将下面这句注释掉。
echo "SQL语句错误: <font color=red>$sql</font> <BR><BR>错误信息: ".mysql_error();
return false;
}
}
/*
  以下函数用于从结果取回数组,一般与 while()循环、$db->query($sql) 配合使用,例如:
$result=$db->query("select * from xzy_teachfl order by tpx");
while($row=$db->getarray($result)){
echo "$row[id] ";
}
*/
function getarray($result){
 return @mysql_fetch_array($result);
}
function getarray2($result){
 return @mysql_fetch_array($result,MYSQL_ASSOC);
}
/*
  以下函数用于取得SQL查询的第一行,一般用于查询符合条件的行是否存在,例如:
  用户从表单提交的用户名$username、密码$password是否在用户表“user”中,并返回其相应的数组:
if($user=$db->getfirst("select * from user where username='$username' and password='$password' "))
echo "欢迎 $username ,您的ID是 $user[id] 。";
else
echo "用户名或密码错误!";
*/
function getfirst($sql){
return @mysql_fetch_array($this->query($sql));
}
/*
  以下函数返回符合查询条件的总行数,例如用于分页的计算等要用到,例如:
$totlerows=$db->getcount("select * from mytable");
echo "共有 $totlerows 条信息。";
*/
function getcount($sql){
return @mysql_num_rows($this->query($sql)); 
}
/*
  以下函数用于更新数据库,例如用户更改密码:
$db->update("update user set password='$new_password' where userid='$userid' ");
*/
function update($sql){
return $this->query($sql);
}
/*
  以下函数用于向数据库插入一行,例如添加一个用户:
$db->insert("insert into user (userid,username,password) values (null,'$username','$password')");
*/
function insert($sql){
return $this->query($sql);
}
//$db->del("delete from admin where user='".$user."'");
function del($sql){
return $this->query($sql);
}
function getid(){ //这个函数用于取得刚插入行的id
return mysql_insert_id();
}
}
/*
  主要函数就是这些,如果你自己有另外的需要,也可以自己添加上去。
  因为凡使用该类的都必须连接数据库,下面就连接并选择好数据库吧:
*/
?>

作者: dmkf   发布时间: 2008-03-31

作者: luzhou   发布时间: 2008-03-31