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二分法在IP地址查询中的应用
Aug 12 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
php文件缓存类用法实例分析
Apr 22 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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 session机制
2011/07/17 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
Python列表生成器的循环技巧分享
2015/03/06 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
大学生职业规划前言模板
2013/12/27 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
会议通知格式范文
2015/04/15 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python