這篇文章介紹的內容是關於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>
將上述程式碼儲存為login.php檔案並在瀏覽器中運行。
>>>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>以粗體顯示部分是新添的程式碼,大部分語句都已有詳細註解。值得注意的是在HTML表單中新增的程式碼,其中在的第一行的儲存格中加入PHP程式碼以輸出伺服器端處理過程可能發生的錯誤或提示,另外在使用者名稱的輸入框標記的value屬性中加入了PHP代碼用來輸出上次提交的使用者名,以便因為輸入密碼錯誤而無法登入的使用者在重試的時候只需要輸入密碼。 再次執行login.php並在表單中輸入資料嘗試登入。
>>>3 更新使用者登入資訊
<?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儲存使用者資訊
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); } ...... ?>
判斷使用者是否已登入
<?php session_start(); if (empty($_SESSION['uid'])) { echo "您还没有登录,不能访问当前页面!"; exit; } ?>
通过判断自动全局变$_SESSION中的uid是否为空,就可以判断用户是否已经登录。如果用户没有登录,就提示其无法访问当前页面,并终止程序的运行(或者使用一条重定向语句将页面导向登录页)。
相关推荐:
以上是PHP使用者登入驗證模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!