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用户登录状态操作类的相关知识。

下面给大家补充点知识,Cookies 和 Session的区别

1.cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据。

2.session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了。

注:为这个用户创建的Cookie的名称是aspsessionid。这个Cookie的唯一目的就是为每一个用户提供不同的身份认证。

3.cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。

4.cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。
简单的说,当你登录一个网站的时候,

· 如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造,但是如果你能够获取某个登录用户的 sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的。sessionid是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性.

· 如果浏览器使用的是cookie,那么所有的数据都保存在浏览器端,比如你登录以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。如果你能够截获某个用户的 cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的。所以,使用 cookie被攻击的可能性比较大。如果设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,如果有的话,就读取该 cookie,然后发送给服务器。如果你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的 cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。所以 cookie是可以伪造的。当然,伪造的时候需要主意,直接copy

cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器

5.两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去。

(1)cookie数据存放在客户的浏览器上,session数据放在服务器上

(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session

(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE

(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。

(5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

PHP 相关文章推荐
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 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
PHP 的比较运算与逻辑运算详解
May 12 #PHP
You might like
php smarty函数扩展
2010/03/15 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
详解vue-cli3使用
2018/08/14 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python 反向输出字符串的方法
2018/07/16 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
经典c++面试题二
2015/08/14 面试题
艺术设计专业个人求职信
2013/09/21 职场文书
法律专业应届本科毕业生求职信
2013/10/25 职场文书
国际贸易专业推荐信
2013/11/15 职场文书
党员转正介绍人意见
2015/06/03 职场文书
《穷人》教学反思
2016/02/19 职场文书
Win11更新失败并提示0xc1900101
2022/04/19 数码科技