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
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
php递归遍历多维数组的方法
Apr 18 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 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 文件扩展名 获取函数
2009/06/03 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
JS原型对象通俗"唱法"
2012/12/27 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python中防止sql注入的方法详解
2017/02/25 Python
Python定时器实例代码
2017/11/01 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
猫咪家具:CatsPlay
2018/11/03 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
目标管理责任书
2014/04/15 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
幼儿园见习总结
2015/06/23 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技