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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
简单的过滤字符串中的HTML标记
Dec 25 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
PHP 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
基于php iconv函数的使用详解
Jun 09 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
php反射类ReflectionClass用法分析
May 12 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
May 30 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
PHP6 mysql连接方式说明
2009/02/09 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
PHP创建XML接口示例
2019/07/04 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
linux下安装easy_install的方法
2013/02/10 Python
python获取mp3文件信息的方法
2015/06/15 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
python中嵌套函数的实操步骤
2019/02/27 Python
python属于跨平台语言码
2020/06/09 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
运动会解说词50字
2014/01/18 职场文书
卫生安全检查制度
2014/02/04 职场文书
同居协议书范本
2014/04/23 职场文书
世界读书日的活动方案
2014/08/20 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书