這篇文章介紹的內容是關於PHP用戶登入驗證模組 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
##<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>User Login</title>
<style type="text/css">
<!—
.alert {color: red}
.textinput {width:160px}
.btn {width:80px}
table {border: 3px double;background-color:#eeeeee;}
-->
</style>
</head>
<body>
<form name="frmLogin" method="post" action="login.php" onSubmit="return doCheck();"> <table border="0" cellpadding="8" width="350" align="center">
<tr><td colspan="2" align="center" class="alert"></td></tr>
用户名:
<td><input name="username" type="text" id="username" class="textinput" /></td> </tr>
<tr><td>密码:</td>
<td><input name="pwd" type="password" id="password" class="textinput" /></td> </tr>
<tr><td colspan="2" align="center">
<input type="submit" class="btn" value="登录">
<input type="reset" class="btn" value="重置">
</td>
</tr>
</form>
</body>
</html>
<br/>>>>2 驗證登入名稱和密碼
<br/>
<?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(); } } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>User Login</title> <style type="text/css"> <!-- .alert {color: red} .textinput {width:160px} .btn {width:80px} table {border: 3px double;background-color:#eeeeee;} --> </style> </head> <body> <form name="frmLogin" method="post" action="login.php" onSubmit="return doCheck();"> <table border="0" cellpadding="8" width="350" align="center"> <tr><td colspan="2" align="center" class="alert"><?echo $errmsg;?></td></tr> 用户名: <td><input name="username" type="text" id="username" class="textinput" value="<?echo $username;?>" /></td> </tr> <tr><td>密码:</td> <td><input name="pwd" type="password" id="password" class="textinput" /></td> </tr> <tr><td colspan="2" align="center"> <input type="submit" class="btn" value="登录"> <input type="reset" class="btn" value="重置"> </td> </tr> </form> </body> </html>
<br/>>>>3 更新使用者登入資訊<br/>
在使用者資訊表t_user中,f_logintimes欄位用來記錄使用者的登入次數,f_lasttime欄位用來記錄使用者最後一次登入的時間,f_login欄位用來記錄使用者最後一次登入的IP,資料庫中記錄這些資訊主要是為管理提供統計使用者登入次數和使用者地理分佈的方便。這些資料在使用者 每次登入後都要更新,以下來新增更新這些資料的程式碼。 開啟login.php文件,將其頭部的PHP程式碼變更如下:<br/><?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 = "用户名或密码不正确,登录失败!";
}
......
?>
<br/>>>>4 用Session儲存使用者資訊
Cookie是保存在客戶端的一個小文件,可以將一些需要在頁間共享的資料儲存在這個文件中。但Cookie有3個缺點:一是大小不可以超過 4KB(不 同的瀏覽器可能限制不同),二是使用者可以在瀏覽器設定中停用Cookie,三是Cookie是在客戶端記錄資料安全性較差。 Session一般是透過Cookie來實現的,如果使用者停用了Cookie,Session也同樣失效。有別於Cookie的是,Session 只是把 一個資訊的標識透過Cookie放在客戶端而實際的資訊卻存放在伺服器上,這樣安全性效能上有較大的提升。現在也有另一種不透過Cookie而使用 Session的方法,即URL重寫技術。這種方法是將Session的識別作為URL的參數與服務進行交互,其好處是不受客戶端對Cookie禁用的限 制,缺點是使用起來較為麻煩。 <br/>在PHP中使用Session非常簡單。 PHP提供了一個自動全域變數$_SESSION用來處理Session。但是要注意的是,如果在PHP 的設定檔中沒有設定自動啟動Session的話,在使用Session之前一定要呼叫session_start()函數啟動Session。 <br/>再次開啟login.php,加入以下以粗體顯示的程式碼,以記錄使用者資訊。 <br/><br/>
<?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); } ...... ?>
判斷使用者是否已登入<br/>
既然上一小節已經完成了將使用者名稱儲存到Session中的工作,判斷使用者是否已經登入就很簡單,程式碼如下:<?php session_start(); if (empty($_SESSION['uid'])) { echo "您还没有登录,不能访问当前页面!"; exit; } ?>
通过判断自动全局变$_SESSION中的uid是否为空,就可以判断用户是否已经登录。如果用户没有登录,就提示其无法访问当前页面,并终止程序的运行(或者使用一条重定向语句将页面导向登录页)。
相关推荐:
以上是PHP使用者登入驗證模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!