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 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
php.ini 中文版
Oct 28 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
php校验表单检测字段是否为空的方法
Mar 20 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 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 include的妙用,实现路径加密
2008/07/29 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
php检测文本的编码
2015/07/26 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
python文件操作整理汇总
2014/10/21 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python三级目录展示的实现方法
2016/09/28 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
django model object序列化实例
2020/03/13 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
护士在校生自荐信
2014/02/01 职场文书
公司合作意向书范文
2014/07/30 职场文书
法人授权委托书样本
2014/09/19 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
电工实训心得体会
2016/01/14 职场文书