本文通過一個簡單的實例完成了完整的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程序開發有所幫助。