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数字型字符串加解密代码
Apr 24 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
Laravel中10个有用的用法小结
May 06 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 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支持页面回退的两种方法
2008/01/10 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
PHP扩展开发入门教程
2015/02/26 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
Python jieba库用法及实例解析
2019/11/04 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python实现logistic分类算法代码
2020/02/28 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
保安员岗位职责
2013/11/17 职场文书
计算机毕业生求职信
2014/06/10 职场文书
2014年环保工作总结
2014/11/26 职场文书
表扬通报怎么写
2015/01/16 职场文书
神农溪导游词
2015/02/11 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
《所见》教学反思
2016/02/23 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android