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项目的方法
Oct 09 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
PHP中常用的转义函数
Feb 28 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
CI(CodeIgniter)框架视图中加载视图的方法
Mar 24 PHP
php实现查询功能(数据访问)
May 23 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 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 项目的方法
2007/01/02 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
Python 闭包的使用方法
2017/09/07 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
演讲稿格式范文
2014/05/19 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
读后感作文评语
2014/12/25 职场文书
排球赛新闻稿
2015/07/17 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
小学语文教学反思范文
2016/03/03 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python
Python进程池与进程锁之语法学习
2022/04/11 Python
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript