php同时使用session和cookie来保存用户登录信息的实现代码

原创 2017-01-05 14:07:09 278
摘要:1、用户登录状态操作类UserLogin<?php  final class UserLogin {   public function __construct() {     }   public static funct

1、用户登录状态操作类UserLogin

<?php 
final class UserLogin { 
 public function __construct() {   
 } 
 public static function getUserInfo() {
  if (isset($_COOKIE["user_id"])&&$_COOKIE["user_id"]&&(trim($_COOKIE["user_id"])!="")) {
   if (isset($_SESSION["USER_INFO"]))
    return $_SESSION["USER_INFO"];
   $dao = new UserDao();
   $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();
  return null;
 }
  public static function setUserInfo($userInfo) {
  $_SESSION["USER_INFO"] = $userInfo;
  setcookie("docloud_sid", session_id(), time() + 36000);
  setcookie("user_id", $userInfo->getId(), time() + 36000);
 } 
 public static function isLogin() {
  if (self::getUserInfo()) {
   return true;
  }
  return false;
 } 
 public static function delUserInfo() {
  self::clearCookie();
  session_destroy();
 }  
 private static function clearCookie() {
  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);
 } 
} 
?>

2、在用户输入用户名、密码处调用来做相关判定

<?php
require_once 'Init.php';
 
// if logged in, logout
if (UserLogin::isLogin() && $_COOKIE["user_id"]==1) {
 UserLogin::delUserInfo();
}
else if (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 = new UserDao();
  $user = $dao->findByName($username);
  $last_login_ip = Utils::getIpAddress();
  $user->setLastLoginIp($last_login_ip);
  $now = new DateTime();
  $user->setLastLoginTime($now);
  $dao->save($user);
  UserLogin::setUserInfo($user);
  Flash::addFlash('登录成功!');
  Utils::redirect('welcome');
 }
  
 foreach ($errors as $e) {
  $msg .= $e->getMessage()."<br>";
 }
}
 
?>

更多关于php同时使用session和cookie来保存用户登录信息的实现代码请关注PHP中文网(www.php.cn)其他文章!

发布手记

热门词条