php中实现记住密码自动登录的代码


Posted in PHP onMarch 02, 2011

php实现记住密码自动登录方法不止一个,下面出现有二个emptyempty,其实是一个,那是因为代码高亮有bug。希望对大家有帮助。

一,用户登录的check

//检查用户是否登录 
function checklogin(){ 
if(emptyempty($_SESSION['user_info'])){ //检查一下session是不是为空 
if(emptyempty($_COOKIE['username']) || emptyempty($_COOKIE['password'])){ //如果session为空,并且用户没有选择记录登录状 
header(”location:login.php?req_url=”.$_SERVER['REQUEST_URI']); //转到登录页面,记录请求的url,登录后跳转过去,用户体验好。 
}else{ //用户选择了记住登录状态 
$user = getUserInfo($_COOKIE['username'],$_COOKIE['password']); //去取用户的个人资料 
if(emptyempty($user)){ //用户名密码不对没到取到信息,转到登录页面 
header(”location:login.php?req_url=”.$_SERVER['REQUEST_URI']); 
}else{ 
$_SESSION['user_info'] = $user; //用户名和密码对了,把用户的个人资料放到session里面 
} 
} 
} 
} 
//检查用户是否登录 
function checklogin(){ 
if(empty($_SESSION['user_info'])){ //检查一下session是不是为空 
if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){ //如果session为空,并且用户没有选择记录登录状 
header(”location:login.php?req_url=”.$_SERVER['REQUEST_URI']); //转到登录页面,记录请求的url,登录后跳转过去,用户体验好。 
}else{ //用户选择了记住登录状态 
$user = getUserInfo($_COOKIE['username'],$_COOKIE['password']); //去取用户的个人资料 
if(empty($user)){ //用户名密码不对没到取到信息,转到登录页面 
header(”location:login.php?req_url=”.$_SERVER['REQUEST_URI']); 
}else{ 
$_SESSION['user_info'] = $user; //用户名和密码对了,把用户的个人资料放到session里面 
} 
} 
} 
}

在访问后台的每个页面时,都要先进行上面的检查

二,用户提交登录信息
当用户填写用户名和密码后就提交到这儿来,

$username = trim($_POST['username']); 
$password = md5(trim($_POST['password'])); 
$validatecode = $_POST['validateCode']; 
$ref_url = $_GET['req_url']; 
$remember = $_POST['remember']; $err_msg = ”; 
if($validatecode!=$_SESSION['checksum']){ 
$err_msg = “验证码不正确”; 
}elseif($username==” || $password==”){ 
$err_msg = “用户名和密码都不能为空”; 
}else{ 
$row = getUserInfo($username,$password); 
if(emptyempty($row)){ 
$err_msg = “用户名和密码都不正确”; 
}else{ 
$_SESSION['user_info'] = $row; 
if(!emptyempty($remember)){ //如果用户选择了,记录登录状态就把用户名和加了密的密码放到cookie里面 
setcookie(”username”, $username, time()+3600*24*365); 
setcookie(”password”, $password, time()+3600*24*365); 
} 
if(strpos($ref_url,”login.php”) === false){ 
header(”location:”.$ref_url); 
}else{ 
header(”location:main_user.php”); 
} 
} 
} 
$username = trim($_POST['username']); 
$password = md5(trim($_POST['password'])); 
$validatecode = $_POST['validateCode']; 
$ref_url = $_GET['req_url']; 
$remember = $_POST['remember']; 
$err_msg = ”; 
if($validatecode!=$_SESSION['checksum']){ 
$err_msg = “验证码不正确”; 
}elseif($username==” || $password==”){ 
$err_msg = “用户名和密码都不能为空”; 
}else{ 
$row = getUserInfo($username,$password); 
if(empty($row)){ 
$err_msg = “用户名和密码都不正确”; 
}else{ 
$_SESSION['user_info'] = $row; 
if(!empty($remember)){ //如果用户选择了,记录登录状态就把用户名和加了密的密码放到cookie里面 
setcookie(”username”, $username, time()+3600*24*365); 
setcookie(”password”, $password, time()+3600*24*365); 
} 
if(strpos($ref_url,”login.php”) === false){ 
header(”location:”.$ref_url); 
}else{ 
header(”location:main_user.php”); 
} 
} 
}

关于$ref_url简单解释一下,假如:用户A访问b.php,但是A用户没有登录,跳转到登录页面login.php,在登录页面填完用户和密码后,确定后又跳转到b.php这个页面,而不是跳转一个默认的页面main_user.php。因为b.php是用户A想去的那个页面,所以用户体验会好一点。

三,当用户点退出时,清出记录登录状态

为什么要这样做呢,因为如果有别人用你的电脑的话,他们有可能会浏览到你的个人隐私,所以当用户特意点了退出时,最好是把记录登录状态取消掉。

//退出登录 
function logout(){ 
unset($_SESSION['user_info']); 
if(!emptyempty($_COOKIE['username']) || emptyempty($_COOKIE['password'])){ 
setcookie(”username”, null, time()-3600*24*365); 
setcookie(”password”, null, time()-3600*24*365); 
} 
}
PHP 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
php去除数组中重复数据
Nov 18 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 PHP
如何在PHP中读写文件
Sep 07 PHP
防止用户利用PHP代码DOS造成用光网络带宽
Mar 01 #PHP
php Smarty 字符比较代码
Feb 27 #PHP
php下批量挂马和批量清马代码
Feb 27 #PHP
php SQL Injection with MySQL
Feb 27 #PHP
PHP的SQL注入实现(测试代码安全不错)
Feb 27 #PHP
php通用防注入程序 推荐
Feb 26 #PHP
8个出色的WordPress SEO插件收集
Feb 26 #PHP
You might like
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
浅谈vuex中store的命名空间
2019/11/08 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
django解决跨域请求的问题
2018/11/11 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
工程招投标邀请书
2014/01/26 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
员工工作表现评语
2014/04/26 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
任长霞观后感
2015/06/16 职场文书
《雷雨》教学反思
2016/02/20 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL