php 语法验证_PHP用户登录验证模块
这篇文章介绍的内容是关于PHP用户登录验证模块 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
实现用户登录
>>>1 创建登录表单
登录表单的HTML代码如下:
User Login
.alert {color: red}
.textinput {width:160px}
.btn {width:80px}
table {border: 3px double;background-color:#eeeeee;}
-->
用户名:
密码:
将以上代码保存为login.php文件并在浏览器中运行。
>>>2 验证登录名和密码
用户在登录表单中输入登录信息之后,数据被提交回本页面login.php进行处理,下面在login.php的头部添加验证用户名和密码是否正确的代码。login.php代码更改如下:<?php
require_once('common.php'); // 引入公共文件,其中实现了SQL注入漏洞检查的代码 $username = trim($_POST['username']);
// 取得客户端提交的密码并用md5()函数时行加密转换以便后面的验证
$pwd = md5($_POST['pwd']);
// 设置一个错误消息变量,以便判断是否有错误发生
// 以及在客户端显示错误消息。 其初值为空
$errmsg = '';
if (!empty($username)) { // 用户填写了数据才执行数据库操作
//---------------------------------------------------------
// 数据验证, empty()函数判断变量内容是否为空
if (empty($username)) {
$errmsg = '数据输入不完整';
}
//---------------------------------------------------------
if(empty($errmsg)) { // $errmsg为空说明前面的验证通过
// 调用mysqli的构造函数建立连接,同时选择使用数据库'test'
$db = @new mysqli("127.0.0.1", "developer", "123456", "test");
// 检查数据库连接
if (mysqli_connect_errno()) {
$errmsg = "数据库连接失败!
\n";
}
else {
// 查询数据库,看用户名及密码是否正确
$sql = "SELECT * FROM t_user WHERE f_username='$username' AND f_password='$pwd'";
$rs = $db->query($sql);
// $rs->num_rows判断上面的执行结果是否含有记录,有记录说明登录成功 if ($rs && $rs->num_rows > 0) {
// 在实际应用中可以使用前面提到的重定向功能转到主页
$errmsg = "登录成功!";
}
else {
$errmsg = "用户名或密码不正确,登录失败!";
}
// 关闭数据库连接
$db->close();
}
}
}
?>
User Login
<?echo $errmsg;?> |
用户名:
密码:
以粗体显示部分是新添的代码,大部分语句都已有详细注释。值得注意的是在HTML表单中添加的代码,其中在的第一行的单元格中加入PHP代码用以输 出服务 器端处理过程可能发生的错误或提示,另外在用户名的输入框标记的value属性中添加了PHP代码用以输出上次提交的用户名,以便因为输入密码错误而不能 登录的用户在重试的时候只需要输入密码。
再次运行login.php并在表单中输入数据尝试登录。
>>>3 更新用户登录信息
用户信息表t_user中,f_logintimes字段用来记录用户的登录次数,f_lasttime字段用来记录用户最后一次登录的时 间,f_login字段用来记录用户最后一次登录用的IP,数据库中记录这些信息主要是为管理提供统计用户登录次数和用户地域分布的方便。这些数据在用户 每次登录后都要更新,下面来添加更新这些数据的代码。
打开login.php文件,将其头部的PHP代码更改如下:<?php
......
if ($rs && $rs->num_rows > 0) {
// 在实际应用中可以使用前面提到的重定向功能转到主页
第4 / 6页
$errmsg = "登录成功!";
// 更新用户登录信息
$ip = $_SERVER['REMOTE_ADDR']; // 获取客户端的IP
$sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,";
$sql .= "f_lasttime=now(), f_loginip='$ip' ";
$sql .= " WHERE f_username='$username'";
$db->query($sql);
}
else {
$errmsg = "用户名或密码不正确,登录失败!";
}
......
?>
以上粗体部分为新添的代码,代码中首先从自动全局变量$_SERVER中获得客户端的IP地址,然后构造SQL语句并执行该语句以更新用户登录信 息。值得 注意的是该SQL语句中对f_lasttime的赋值是通过调用MySQL的内部函数now()来实现的,MySQL的now()函数返回的是服务器上的 当前时间。
>>>4 用Session保存用户信息
HTTP协议是无状态的。它完成的事情只是简单地发送请求到服务器,以及从服务器获取数据;除此之外一无所知,即使两次请求同一个PHP文件,它也不会认为两次请求之间有任何联系。
由于HTTP协议的无状态,这就使得无法在两个不同的请求之间共享信息,如无法记录“当前访问者”的信息。虽然在登录过程已经验证了用户的用户名与 密码是 正确的,但是当用户跳转到其他页面时,从登录页面获得的用户信息全部丢失,这是用户不希望发生的。同时,要求用户进入每一个页面时都要输入用户名与密码进 行验证又是不现实的,这就要求可以在不同页面之间共享信息。
一般来说,对于PHP以及其他的Web编程语言,可以使用Cookie或者是Session来解决这个问题。
Cookie是保存在客户端的一个小文件,可以将一些需要在页面间共享的资料存储在这个文件中。但Cookie有3个缺点:一是大小不可以超过 4KB(不 同的浏览器可能限制不同),二是用户可以在浏览器设置中禁用Cookie,三是Cookie是在客户端记录资料安全性较差。 Session一般是通过Cookie来实现的,如果用户禁用了Cookie,Session也同样失效。不同于Cookie的是,Session 只是把 一个信息的标识通过Cookie放在客户端而实际的信息却存放在服务器上,这样安全性能上有较大的提高。现在也有另外一种不通过Cookie而使用 Session的方法,即URL重写技术。这种方法是将Session的标识作为URL的参数与服务进行交互,其好处是不受客户端对Cookie禁用的限 制,缺点是使用起来较为麻烦。
在PHP中使用Session非常简单。PHP提供了一个自动全局变量$_SESSION用于处理Session。但是需要注意的是,如果在PHP 的配置 文件中没有设置自动启动Session的话,在使用Session之前一定要调用session_start()函数启动Session。
再次打开login.php,添加以下以粗体显示的代码,以记录用户信息。<?php
......
if ($rs && $rs->num_rows > 0) {
// 使用session保存当前用户
session_start();
$_SESSION['uid'] = $username;
// 在实际应用中可以使用前面提到的重定向功能转到主页
$errmsg = "登录成功!";
// 更新用户登录信息
$ip = $_SERVER['REMOTE_ADDR']; // 获取客户端的IP
$sql = "UPDATE t_user SET f_logintimes = f_logintimes + 1,";
$sql .= "f_lasttime=now(), f_loginip='$ip' ";
$sql .= " WHERE f_username='$username'";
$db->query($sql);
}
......
?>
不要滥用Session,Session最大的作用是在页面之间维持状态。许多初学者在掌握Session技术后,很容易将Session作为存储 数据的 法宝,在Session里放置很多数据。由于这些数据直到Session过期才会被释放,因此会给服务器带来很大的负担。
判断用户是否已登录
既然上一小节已经完成了将用户名保存到Session中的工作,判断用户是否已经登录就很简单,代码如下:<?php
session_start();
if (empty($_SESSION['uid'])) {
echo "您还没有登录,不能访问当前页面!";
exit;
}
?>
通过判断自动全局变$_SESSION中的uid是否为空,就可以判断用户是否已经登录。如果用户没有登录,就提示其无法访问当前页面,并终止程序的运行(或者使用一条重定向语句将页面导向登录页)。
相关推荐:
php 语法验证_PHP用户登录验证模块相关推荐
- php yanzhengm,php登录验证_php用户登录与验证的代码举例
摘要 腾兴网为您分享:php用户登录与验证的代码举例,雨课堂版,新东方,小度音响,手机互联等软件知识,以及py平台,折扇app,内蒙古税务局,货代,兰斯10,新浪长微博,吉民生,yy球球直播视频,速优 ...
- AD用户登录验证,遍历OU(LDAP)
先安装python-ldap模块 1.验证AD用户登录是否成功 import sqlite3,ldapdomainname='cmr\\' username='zhangsan' ldapuser = ...
- html登录验证功能,续:实现用户登录验证功能
一.提纲 1.Previously前情提要 已经把Thymeleaf部署到项目中: 把前端开发的静态资源成功引入到项目中: 完成登录验证功能,登录成功跳转到success.html页面,登录失败跳转到 ...
- 使用SSH框架实现用户登录验证
今天,写一个非常简单的通过struts+hibernate+spring的集成来实现用户登录验证的例子,让大家了解一下三者是如何是整合的. 我们可以通过myeclipse的向导,生成相应的环境搭建,如 ...
- ajax登录验证的原理,ajax用户登录验证-get和post提交方式,与工作原理—2018-8-15...
ajax用户登录验证: 实例 html> Ajax实战:表单验证 用户登录 邮箱: 密码: 提交 let btn = document.getElementsByTagName('button' ...
- 图解用户登录验证业务流程(推荐)
点击关注公众号,实用技术文章及时了解 前言 本文通过图示及代码的方式介绍用户登录流程及技术实现,内容包括用户登录,用户验证,如何获取操作用户的信息以及一些黑名单及匿名接口如何免验证相关的实现. 结合昨 ...
- python登录验证程序_Python模拟用户登录验证
本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下 1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3 ...
- JavaWeb 实验 Servlet用户登录验证
实验2.2 Servlet用户登录验证 实验内容: 编写JSP程序,实现用户提交登录表单给Servlet,由Servlet 查询数据库(模拟查询,不用真的连接数据库查询),对用户是否存在进行验证. 实 ...
- 【209期】图解用户登录验证业务流程(面试应答推荐)
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...
最新文章
- c语言 程序 作文,编程之乐作文600字
- column 对齐排列命令
- 网站建设中购买虚拟主机重要参数有哪些?
- Nginx+Tomcat简单集群配置
- linux shell 合并多个文件 并删除重复行
- Java NIO:IO与NIO的区别
- Linux Shell脚本编程 --sort命令
- linux中grep命令查找目录下,linux中查找grep与find命令的使用
- zookeeper客户端练习(idea-Junit测试)
- 传球游戏(洛谷-P1057)
- 浅谈Java的数据结构
- 微服务架构模式下配置管理
- FFmpeg开发(十)——Qt 实现FFmpeg下载m3u8视频
- 解决AssertionError Torch not compiled with CUDA enabled问题
- c语言 链表怎么调用,求教!!!链表,函数调用高手进!!!
- bam文件测序深度统计-bamdst
- package.json scripts 脚本使用指南
- 解决vscode突然不能自动补全html标签
- 2019日本Summer Sonic音乐节攻略(明星阵容)
- MacBook Pro安装homebrew
热门文章
- gitlab 迁移_无忌过招:手把手教你搭建自己的GitLab库
- 锐龙版和linux有什么区别,华为MateBook D 14锐龙版Linux版价格为何这么便宜
- mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
- 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的物资管理系统
- 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的办公一体化系统
- python3.5以及scrapy,selenium,等 安装
- 用原生 JS 实现双向绑定及应用实例
- 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
- Asp.net Mvc使用PagedList分页
- 记一次酷派尚锋Y75刷机