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


Posted in PHP onMay 13, 2016

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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
一个PHP+MSSQL分页的例子
Oct 09 PHP
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
Yii数据读取与跳转参数传递用法实例分析
Jul 12 PHP
PDO::lastInsertId讲解
Jan 29 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 #PHP
php用户登录之cookie信息安全分析
May 13 #PHP
PHP数组函数知识汇总
May 12 #PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 #PHP
php similar_text()函数的定义和用法
May 12 #PHP
php使用curl并发减少后端访问时间的方法分析
May 12 #PHP
php反射类ReflectionClass用法分析
May 12 #PHP
You might like
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
解放web程序员的输入验证
2006/10/06 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
Python中的闭包详细介绍和实例
2014/11/21 Python
Python读写文件方法总结
2015/06/09 Python
python处理xml文件的方法小结
2017/05/02 Python
python关闭占用端口方式
2019/12/17 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
更夫岗位责任制
2014/02/11 职场文书
节约用电标语
2014/06/17 职场文书
博物馆观后感
2015/06/05 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
MySQL派生表联表查询实战过程
2022/03/20 MySQL
青岛市的收音机研制与生产
2022/04/07 无线电