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

前端技术 2023/09/08 PHP

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来保存用户登录信息的实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持phpstudy。

本文地址:https://www.stayed.cn/item/23121

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。