- 論壇徽章:
- 0
|
PHP手冊中說,Session_start()之前應(yīng)沒有任何輸出,否則就出錯。那么我現(xiàn)在想做一個用戶登錄的類,這個類中有很多函數(shù)涉及Session_start(),如:初始化用戶登錄函數(shù),判斷是否已經(jīng)登錄函數(shù)。那么我怎么寫這個Session_start()它才能不報錯呢?
有個現(xiàn)成的class可以看一下效果:
<?php
class operateLogin
{
var $username; //用戶名
var $userpass; //密碼
var $userid; //用戶id
var $userlevel; //用戶級別
var $authtable="account"; //驗證用數(shù)據(jù)表
var $usecookie=true; //使用cookie保存sessionid
var $cookiepath='/'; //cookie路徑
var $cookietime=3600*24*365; //cookie有效時間
var $err_mysql="MySQL錯誤"; //mysql出錯提示
var $err_username="無效用戶名"; //用戶名無效提示
var $err_user="無效用戶"; //用戶無效提示(被封禁)
var $err_password="密碼錯誤"; //密碼錯誤提示
var $err; //出錯提示
var $errorreport=false; //顯示錯誤
function Login($dbserv,$dbport,$dbuser,$dbpass,$dbname) { //構(gòu)造函數(shù),連接數(shù)據(jù)庫
if(@mysql_pconnect($dbserv.":".$dbport,$dbuser,$dbpass)) {
mysql_select_db($dbname);
} else {
$this->errReport($this->err_mysql);
$this->err=$this->err_mysql;
}
}
function isLoggedin() { //判斷是否登錄
if(isset($_COOKIE['sid'])) { //如果cookie中保存有sid
session_start();
session_id($_COOKIE['sid']);
$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;
}
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;
}
}
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_cookie) { //如果使用cookie保存sid
if(!setcookie('sid',$sid,time()+$this->cookietime,$this->cookiepath))
$this->errReport("set cookie failed");
} else {
setcookie('sid','',time()-3600*24*365); //清除cookie中的sid
}
}
function userLogout() { //用戶注銷
session_start();
unset($_SESSION['username']); //清除session中的username
if(setcookie('sid','',time()-3600*24*365)) //清除cookie中的sid
return true;
else
return false;
}
function errReport($str) { //報錯
if($this->error_report)
echo "ERROR: $str";
}
}
?>
[ 本帖最后由 fisherjams 于 2008-3-6 22:12 編輯 ] |
|