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 采集获取指定网址的内容
Jan 05 PHP
ecshop 订单确认中显示省市地址信息的方法
Mar 15 PHP
《PHP编程最快明白》第八讲:php启发和小结
Nov 01 PHP
基于php验证码函数的使用示例
May 03 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php里array_work用法实例分析
Jul 13 PHP
php制作的简单验证码识别代码
Jan 26 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 PHP
jQuery+PHP实现图片上传并提交功能
Jul 27 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
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
Django中多种重定向方法使用详解
2019/07/17 Python
Pytorch 实现权重初始化
2019/12/31 Python
Python中格式化字符串的四种实现
2020/05/26 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
大学自主招生自荐信范文
2014/02/26 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2015年公务员工作总结
2015/04/24 职场文书
宝塔更新Python及Flask项目的部署
2022/04/11 Python
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL