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 相关文章推荐
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 PHP
php 获取可变函数参数的函数
Aug 26 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
php实现搜索类封装示例
Mar 31 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 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
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
PDO::inTransaction讲解
2019/01/28 PHP
文本加密解密
2006/06/23 Javascript
JavaScript脚本性能的优化方法
2007/02/02 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
python实现文件名批量替换和内容替换
2014/03/20 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
django输出html内容的实例
2018/05/27 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
员工培训心得体会
2013/12/30 职场文书
18岁生日感言
2014/01/12 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
python中%格式表达式实例用法
2021/06/18 Python
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android