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 相关文章推荐
初探PHP5
Oct 09 PHP
mysql_num_rows VS COUNT 效率问题分析
Apr 23 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
php使用curl获取https请求的方法
Feb 11 PHP
PHP 使用memcached简单示例分享
Mar 05 PHP
php超快高效率统计大文件行数
Jul 05 PHP
php检测文本的编码
Jul 26 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
PHP打印输出函数汇总
Aug 28 PHP
PHP 实现缩略图
Mar 09 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
php下获取http状态的实现代码
2014/05/09 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
tagName的使用,留一笔
2006/06/26 Javascript
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
Vue实现页面添加水印功能
2019/11/09 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
使用tensorflow实现线性回归
2018/09/08 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
python语言是免费还是收费的?
2020/06/15 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
送货司机岗位职责
2013/12/11 职场文书
留学顾问岗位职责
2014/04/14 职场文书
区级文明单位申报材料
2014/05/15 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
在职员工证明书
2014/09/19 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
图书馆义工感想
2015/08/07 职场文书
感恩主题班会教案
2015/08/12 职场文书
学生会干部任命书
2015/09/21 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android