自己写的一个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
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
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
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一下就行了
?>
复制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();
}
}
/*
主要函数就是这些,如果你自己有另外的需要,也可以自己添加上去。
因为凡使用该类的都必须连接数据库,下面就连接并选择好数据库吧:
*/
?>
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28