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 相关文章推荐
ajax缓存问题解决途径
Dec 06 PHP
php session处理的定制
Mar 16 PHP
PHP 上传文件大小限制
Jul 05 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
smarty 缓存控制前的页面静态化原理
Mar 15 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
php简单统计中文个数的方法
Sep 30 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PHP中cookies使用指南
2007/03/16 PHP
微信支付开发交易通知实例
2016/07/12 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
javascript ajax 仿百度分页函数
2013/10/29 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
Python基于select实现的socket服务器
2016/04/13 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
基于python3生成标签云代码解析
2020/02/18 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
10张动图学会python循环与递归问题
2021/02/06 Python
饲料采购员岗位职责
2013/12/19 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
Docker安装MySql8并远程访问的实现
2022/07/07 Servers