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+oracle 分页类
Oct 09 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
php实现删除空目录的方法
Mar 16 PHP
php中使用sftp教程
Mar 30 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
php判断目录存在的简单方法
Sep 26 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 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 Token(令牌)设计
2008/03/15 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
php命令行写shell实例详解
2018/07/19 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
python清除字符串里非字母字符的方法
2015/07/02 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
校园餐饮创业计划书
2014/01/10 职场文书
办公室文员工作职责
2014/01/31 职场文书
一夜的工作教学反思
2014/02/08 职场文书
《老王》教学反思
2014/02/23 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
《静夜思》教学反思
2016/02/17 职场文书
《梅花魂》教学反思
2016/02/18 职场文书