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 相关文章推荐
PHP的FTP学习(四)
Oct 09 PHP
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
php读取msn上的用户信息类
Dec 05 PHP
PHP安全防范技巧分享
Nov 03 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
Apr 28 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
PHP实现动态创建XML文档的方法
Mar 30 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
js 编程笔记 无名函数
2011/06/28 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
用js实现in_array的方法
2013/11/05 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
学习vue.js计算属性
2016/12/03 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
几个Shell Script面试题
2014/04/18 面试题
历史学专业推荐信
2013/11/06 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
小学德育工作总结2015
2015/05/12 职场文书
世界名著读书笔记
2015/06/25 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers