本文通過一個簡單的實例完成了完整的PHP+MySQL會員系統功能。是非常實用的一個應用。具體實現步驟如下:
一、會員系統的原理:
登陸-->判斷-->保持狀態(Cookie或Session)-->驗證狀態及其權限
二、會員系統的安全:
1、學會使用常量提高md5安全性
2、Cookie/ Session 少用明文信息
3、Session安全性要大于Cookie
4、使用Cookie/ Session讀取信息 盡量增加判斷信息
5、Cookie/ Session內容要精簡
6、對于錯誤信息及時銷毀Cookie/ Session
三、數據庫test,表user_list,及其字段
uid m_id username password
1 1 admin 291760f98414679e3fd3f9051b19b6f7
2 2 admin2 895785cfa5d8157f4d33c58ae0f55123
password:分別為md5(admintest100)、md5(admin2test100)即密碼是與常量test100綁定后,再經過加密儲存到數據庫中的,這一步可以在注冊時設置。
四、配置頁面m_config.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<?php session_start(); //數據庫連接 $conn =mysql_connect( 'localhost' , 'root' , '' ); mysql_select_db( 'test' , $conn ); //定義常量 define(ALL_ps, "test100" ); //查看登錄狀態與權限 function user_shell( $uid , $shell , $m_id ){ $sql = "select * from user_list where `uid`='$uid'" ; $query =mysql_query( $sql ); $us = is_array ( $row =mysql_fetch_array( $query )); $shell = $us ? $shell ==md5( $row [username]. $row [password].ALL_PS):FALSE; if ( $shell ){ if ( $row [m_id]<= $m_id ){ //$row[m_id]越小權限越高,為1時權限最高 return $row ; } else { echo "你的權限不足,不能查看該頁面" ; exit (); } } else { echo "登錄后才能查看該頁" ; exit (); } } //設置登錄超時 function user_mktime( $onlinetime ){ $new_time = mktime (); echo $new_time - $onlinetime . "秒未操作該頁面" . "<br>" ; if ( $new_time - $onlinetime > '10' ){ //設置超時時間為10秒,測試用 echo "登錄超時,請重新登錄" ; exit (); session_destroy(); } else { $_SESSION [times]= mktime (); } } ?> |
五、登錄頁面m_user.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php include ( "m_config.php" ); //echo md5("admin2".ALL_PS); if ( $_POST [submit]){ $username = str_replace ( " " , "" , "$_POST[username]" ); $sql = "select * from user_list where `username`='$username'" ; $query =mysql_query( $sql ); $us = is_array ( $row =mysql_fetch_array( $query )); $ps = $us ? md5( $_POST [password].ALL_PS)== $row [password] : FALSE; if ( $ps ){ $_SESSION [uid]= $row [uid]; $_SESSION [user_shell]=md5( $row [username]. $row [password].ALL_PS); $_SESSION [times]= mktime (); //取得登錄時忘該的時間 echo "登錄成功" ; } else { echo "用戶名或密碼錯誤" ; session_destroy(); //密碼錯誤時消除所有的session } } ?> <form action= "" method= "post" > 用戶名:<input name= "username" type= "text" /><br /> 用戶名:<input name= "password" type= "password" /><br /> 驗證碼:<input name= "code" type= "code" />5213<br /><br /> <input name= "submit" type= "submit" value= "登錄" /> </form> |
六、設置了權限及超時的頁面m_zhuangtai.php:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php include ( "m_config.php" ); $arr =user_shell( $_SESSION [uid], $_SESSION [user_shell],1); //設置該頁面只有權限為1時即最高權限的才能訪問 user_mktime( $_SESSION [times]); //判斷是否超時10秒 //echo $_SESSION[times]."<br>";//登錄時該的時間 //echo mktime()."<br>";//當前日期 //echo $arr[username]."<br>"; //echo $arr[uid]."<br>"; ?> |
有權限方能查看的內容
七、測試結果:
1、用sss,sssssss登錄,提示:用戶名或密碼錯誤。查看m_zhuangtai.php,提示:登錄后才能查看該頁。
2、用admin admin登錄后,因為權限為1,所以可以查看m_zhuangtai.php頁面的內容。
3、用admin admin登錄后,因為權限為1,所以可以查看m_zhuangtai.php頁面的內容,但10秒后再刷新,提示:X秒未操作該頁面 登錄超時,請重新登錄。
4、用admin2 admin2登錄后,因為權限為2,所以無法查看m_zhuangtai.php頁面的內容,提示:你的權限不足,不能查看該頁面。
希望本文所述實例對大家PHP程序開發有所幫助。