优化利用mysql存款和储蓄session的php代码

PHP代码,PHP用于登录的类,而且session回收还得自己另外处理,  2、完全使用数据库和cookie来模拟session的功能

PHP代码:
<?
/*
* 名称:CnkknD PHP Login Class
* 描述:PHP用于登陆的类,基于MySQL
* 作者:Daniel King,cnkknd@163.com
* 日期:2003/8/25
*/

前面写过两篇小说《自定义SESSION(二)——数据库保存》和《作者何以不接纳session》
  但新兴开采都有标题。后面一个管理在实质上中大致没什么用项,并且session回笼还得和煦其它管理。后面一个频仍的操作数据库,打来了比相当大的习性难点。

class Login
{
var $username; //用户名
var $userpass; //密码
var $userid; //用户id
var $userlevel; //客户品级

  目前稳重思量下,大概给出贰个方案,但还并未现实详尽的测验。
  1、session处理和总计结合起来。同期旅客也都有记录。
  2、完全使用数据库和cookie来模拟session的意义。
  3、客商的对session的操作都全力以赴确认保证在一条sql语句完毕。不用到session的时候,相对相当的少一条查询。
  4、为了功用起见,session的回笼没有并轨进来,但提供了接口,能够调用达成。

var $authtable=”account”; //验证用数据表

一时半刻交由代码,不具体表达。
sql

var $usecookie=true; //使用cookie保存sessionid
var $cookiepath=’/’; //cookie路径
var $cookietime=108000; //cookie有效时间

CREATE TABLE `*****_session` (
 `sid` char(32) NOT NULL,
 `uid` int(10) NOT NULL,
 `username` char(32) NOT NULL,
 `usertype` tinyint(1) NOT NULL,
 `activetime` int(10) NOT NULL,
 `expiry` int(10) NOT NULL,
 `ip` char(15) NOT NULL,
 `url` char(80) NOT NULL,
 `value` char(255) NOT NULL,
 PRIMARY KEY  (`sid`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

var $err_mysql=”mysql error”; //mysql出错提醒
var $err_username=”username invalid”; //客商名无效提醒
var $err_user=”user invalid”; //顾客无效提示(被封禁State of Qatar
var $err_password=”password error”; //密码错误提示

php代码

var $err; //出错提醒

<? 
class session{ 

var $errorreport=false; //呈现错误

    private $_sessionPrex= ”;//session的前缀 

function Login($dbserv,$dbport,$dbuser,$dbpass,$dbnameState of Qatar //结构函数,连接数据库
{
if(@mysql_pconnect($dbserv.”:”.$dbport,$dbuser,$dbpass))
{
mysql_select_db($dbname);
}
else
{
$this->errReport($this->err_mysql);
$this->err=$this->err_mysql;
}
}

    private $_time = ”;//当前时刻 

function isLoggedin(State of Qatar //判定是或不是登入
{
if(isset($_COOKIE[‘sid’]卡塔尔(قطر‎卡塔尔(قطر‎ //如若cookie中保留有sid
{
session_id($_COOKIE[‘sid’]);
session_start();
$this->username=$_SESSION[‘username’];
$this->userid=$_SESSION[‘userid’];
$this->userlevel=$_SESSION[‘userlevel’];
return true;
}
else //借使cookie中未保存sid,则直接检查session
{
session_start();
if(isset($_SESSION[‘username’]))
return true;
}
return false;
}

    private $_model = null;//数据库操作模型 

function userAuth($username,$userpass卡塔尔(قطر‎ //客商认证
{
$this->username=$username;
$this->userpass=$userpass;
$query=”select * from `”.$this->authtable.”` where `username`=’$username’;”;
$result=mysql_query($query);
if(mysql_num_rows($result)!=0卡塔尔(قطر‎ //找到此顾客
{
$row=mysql_fetch_array($result);
if($row[‘bannd’]==1卡塔尔国 //此顾客被封禁
{
$this->errReport($this->err_user);
$this->err=$this->err_澳门京葡网站,user;
return false;
}
elseif(md5($userpass)==$row[‘userpass’]卡塔尔 //密码相称
{
$this->userid=$row[‘id’];
$this->userlevel=$row[‘userlevel’];
return true;
}
else //密码不匹配
{
$this->errReport($this->err_password);
$this->err=$this->err_password;
return false;
}
}
else //未有找到此顾客
{
$this->errReport($this->err_username);
$this->err=$this->err_username;
return false;
}
}

    private $_expiry = 1200;//session有效时间 

function setSession() //置session
{
$sid=uniqid(‘sid’); //生成sid
session_id($sid);
session_start();
$_SESSION[‘username’]=$this->username; //给session变量赋值
$_SESSION[‘userid’]=$this->userid; //..
$_SESSION[‘userlevel’]=$this->userlevel; //..
if($this->use_cookieState of Qatar //纵然使用cookie保存sid
{
if(!setcookie(‘sid’,$sid,time()+$this->cookietime,$this->cookiepath))
$this->errReport(“set cookie failed”);
}
else
setcookie(‘sid’,”,time()-3600); //清除cookie中的sid
}

    private $_domain = ”;//session的效用域 

function userLogout(卡塔尔 //顾客注销
{
session_start();
unset($_SESSION[‘username’]); //清除session中的username
if(setcookie(‘sid’,”,time()-3600))
//清除cookie中的sid
return true;
else 
return false;
}

    protected $isNew = 0;//决断操作动作 0 更新 1 扩充 

function errReport($str) //报错
{
if($this->error_report)
echo “ERROR: $str”;
}
}
?> 

    protected $session = array(State of Qatar;//对应的一条session记录 

mysql中表的结构

    public function __construct($options){ 
        $this->_setOptions($options); 
        if(empty($this->_time))$this->_time = time(); 
        $this->session[‘activetime’] = $this->_time; 
    }