您的位置:首页 > 编程语言 > PHP开发

PHP登录对用户名、密码进行验证及登录状态操作

2012-12-18 15:08 721 查看
<?php

finalclassUserLogin{

publicfunction__construct(){

}

publicstaticfunctiongetUserInfo(){
if(isset($_COOKIE["user_id"])&&$_COOKIE["user_id"]&&(trim($_COOKIE["user_id"])!="")){
if(isset($_SESSION["USER_INFO"]))
return$_SESSION["USER_INFO"];
$dao=newUserDao();
$user=$dao->find($_COOKIE["user_id"]);
if($user){
$_SESSION["USER_INFO"]=$user;
setcookie("docloud_sid",session_id(),time()+36000);
setcookie("user_id",$_COOKIE["user_id"],time()+36000);

if(array_key_exists("selected_prj_id",$_COOKIE))
setcookie("selected_prj_id",$_COOKIE["selected_prj_id"],time()+36000);

if(array_key_exists("selected_class_id",$_COOKIE))
setcookie("selected_class_id",$_COOKIE["selected_class_id"],time()+36000);

if(array_key_exists("selected_image_id",$_COOKIE))
setcookie("selected_image_id",$_COOKIE["selected_image_id"],time()+36000);

if(array_key_exists("test_image_ids",$_COOKIE))
setcookie("test_image_ids",$_COOKIE["test_image_ids"],time()+36000);

if(array_key_exists("upload_image_ids",$_COOKIE))
setcookie("upload_image_ids",$_COOKIE["upload_image_ids"],time()+36000);
return$user;
}
}
self::clearCookie();
returnnull;
}

publicstaticfunctionsetUserInfo($userInfo){
$_SESSION["USER_INFO"]=$userInfo;
setcookie("docloud_sid",session_id(),time()+36000);
setcookie("user_id",$userInfo->getId(),time()+36000);
}

publicstaticfunctionisLogin(){
if(self::getUserInfo()){
returntrue;
}
returnfalse;
}

publicstaticfunctiondelUserInfo(){
self::clearCookie();
session_destroy();
}

privatestaticfunctionclearCookie(){
setcookie("docloud_sid","",time()-36000);
setcookie("user_id","",time()-36000);
setcookie("selected_prj_id","",time()-36000);
setcookie("selected_class_id","",time()-36000);
setcookie("selected_image_id","",time()-36000);
setcookie("test_image_ids","",time()-36000);
setcookie("upload_image_ids","",time()-36000);
}

}

/**
*ValidatorforLogin.
*/
finalclassLoginValidator{

privatefunction__construct(){

}

/**
*Validatethegivenusernameandpassword.
*@param$usernameand$passwordtobevalidated
*@returnarrayarrayof{@linkError}s
*/
publicstaticfunctionvalidate($username,$password){
$errors=array();
$username=trim($username);
if(!$username){
$errors[]=newError('username','用户名不能为空。');
}elseif(strlen($username)<3){
$errors[]=newError('username','用户名长度不能小于3个字符。');
}elseif(strlen($username)>30){
$errors[]=newError('username','用户名长度不能超过30个字符。');
}elseif(!preg_match('/^[A-Za-z]+$/',substr($username,0,1))){
$errors[]=newError('username','用户名必须以字母开头。');
}elseif(!preg_match('/^[A-Za-z0-9_]+$/',$username)){
$errors[]=newError('username','用户名只能是字母、数字以及下划线(_)的组合。');
}elseif(!trim($password)){
$errors[]=newError('password','密码不能为空。');
}else{
//checkwhetheruseexistsornot
$dao=newUserDao();
$user=$dao->findByName($username);

if($user){
if(!($user->getPassword()==sha1($user->getSalt().$password))){
$errors[]=newError('password','用户名或密码错误。');
}
}else{
$errors[]=newError('username','用户名不存在。');
}
}
return$errors;
}
}


/**
*Validationerror.
*/
finalclassError{private$source;
private$message;/**
*Createnewerror.
*@parammixed$sourcesourceoftheerror
*@paramstring$messageerrormessage
*/
function__construct($source,$message){
$this->source=$source;
$this->message=$message;
}/**
*Getsourceoftheerror.
*@returnmixedsourceoftheerror
*/
publicfunctiongetSource(){
return$this->source;
}/**
*Geterrormessage.
*@returnstringerrormessage
*/
publicfunctiongetMessage(){
return$this->message;
}}//ifloggedin,logout页面的跳转类在/article/5807952.html里这里不再重复书写
if(UserLogin::isLogin()&&$_COOKIE["user_id"]==1){
UserLogin::delUserInfo();
}elseif(UserLogin::isLogin()){
Utils::redirect('welcome');
}$username=null;
$password=null;
$msg="";if(isset($_POST['username'])&&isset($_POST['password'])){
$username=addslashes(trim(stripslashes($_POST['username'])));
$password=addslashes(trim(stripslashes($_POST['password'])));
//validate
$errors=LoginValidator::validate($username,$password);if(empty($errors)){
//save
$dao=newUserDao();
$user=$dao->findByName($username);
$last_login_ip=Utils::getIpAddress();
$user->setLastLoginIp($last_login_ip);
$now=newDateTime();
$user->setLastLoginTime($now);
$dao->save($user);
UserLogin::setUserInfo($user);
Flash::addFlash('登录成功!');
Utils::redirect('welcome');
}foreach($errorsas$e){
$msg.=$e->getMessage()."<br>";
}
}


?>
本文摘取于网上精髓,大家可以学习及改进
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: