DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 用 PHPRPC 實現 Ajax 安全登錄
用 PHPRPC 實現 Ajax 安全登錄
編輯:AJAX詳解     

這個例子比昨天的例子還要簡單,先來看服務器端:

下載: rpc.PHP
<?PHP
function login($username, $passWord) {
    if (($username == "root") && ($passWord == "admin")) {
        $_SESSION['user'] = "root";
        return true;
    }
    $_SESSION['user'] = null;
    return false;
}
 
require_once("phprpc_server.PHP");
new PHPrpc_server(array('login'));
?>
這段代碼太簡單了,我不需要多說什麼大家也能夠看明白。不過大家會發現,在 login 函數中我用了 $_SESSION 變量,但是並沒有在什麼位置上寫 session_start(),原因在於建立加密連接時,已經自動調用了 session_start(),因此不需要再單獨寫 session_start() 了。為了驗證它是否生效,我們在後面的另一個頁面中(admin.PHP),將判斷這裡設置的 $_SESSION 變量,並根據它來報告登錄成功或者沒成功跳回到登錄頁面。

那再來看看客戶端,客戶端我們將 JavaScript 跟 HTML 分離了,先來看看 Html 頁面。

下載: index.Html
<Html>
<head>
<script type="text/Javascript" src="PHPrpc_clIEnt.JS"></script>
<script type="text/Javascript" src="login.JS"></script>
</head>
<body>
<div align="center">
帳號:<input type="text" id="username" />
密碼:<input type="password" id="passWord" />
<input type="button" value="登錄" id="loginbtn" />
</div>
</body>
</Html>
這個頁面很簡單,只是設置好了表單輸入框和按鈕,所有的處理都是在 login.JS 中完成的。不過需要注意的是這裡的 PHPrpc_clIEnt.js 是 full 壓縮版本,因為我們需要用到它的加密傳輸功能。我們來看看 login.JS 是怎麼寫的。

下載: login.JS
// 創建 PHPrpc 客戶端對象 rpc
PHPrpc_clIEnt.create('rpc');
 
// 初始化帶有加密連接的 rpc 服務,第二個參數表示是否創建加密連接
rpc.use_service('rpc.PHP', true);
 
// 登錄函數
function login() {
    // 如果加密連接已經初始化完畢,則驗證用戶名密碼
    if (rpc.ready) {
        // 獲取用戶輸入的用戶名和密碼
        var username = document.getElementById('username').value;
        var password = document.getElementById('passWord').value;
        // 設置遠程過程調用為單向加密,
        // 即傳遞的參數是加密的,但返回結果不加密
        rpc.encrypt = 1;
        // 調用遠程過程驗證用戶名密碼是否正確,並設置回調函數。
        rpc.login(username, passWord, function (result) {
            // 如果返回結果正確,則轉到登錄後的頁面
            if (result === true) {
                window.location.replace('admin.PHP');
            }
            // 否則提示用戶名密碼不正確
            else {
                alert('用戶名密碼不正確!');
            }
        });
    }
    // 如果連接尚未初始化完畢,則等待 100 毫秒後重試。
    else {
        window.setTimeout('login();', 100);
    }
}
 
window.onload = function () {
    document.getElementById('loginbtn').onclick = login;
}
大家會發現除了在調用 use_service 時,設置了第二個參數為 true 外,還在調用服務器端的 login 函數前,設置了 rpc.encrypt 的值為 1,這裡 1 表示單向加密傳輸,單向加密傳輸是指調用的參數會以加密的方式傳給服務器,但是返回的結果不加密(如果參數是引用參數的話,參數返回時也是加密的)。如果 rpc.encrypt 的值為 0,則表示不加密;如果是 2,則表示雙向加密。

這裡因為只有用戶名和密碼是敏感數據,需要保證它在傳遞給服務器時不被截獲(即使截獲也是加密的內容,無法破解),但返回的結果成功還是不成功並不是什麼需要保密的數據,所以可以不加密。因此這裡選擇了單向加密傳輸。

大家也不必擔心密鑰是否會被截獲,因為密鑰是通過密鑰交換算法,在服務器端和客戶端(浏覽器端)隨機同步生成的,但沒有經過網絡傳輸,在網絡上傳輸的是生成同步密鑰的相關信息,但是只獲取到這些信息是不足以算出密鑰的,因此可以保證密鑰的安全性。而加密算法本身也是一個強加密算法,密鑰長度是 128 位,在沒有密鑰的情況下采用窮舉法也是無法破解的。

大家會發現登錄成功後,我們轉向了 admin.PHP 頁面,下面是這個頁面的一個簡單的例子:

下載: admin.PHP
<?PHP
    session_start();
    if ($_SESSION['user'] == 'root') {
        echo "登錄成功!";
    }
    else {
        header("Location: index.Html");
    }
?>
這裡需要自己 sestion_start() 一下了,之後就可以驗證 $_SESSION[’user’] 是否設置了。

演示程序
實例下載
通過 PHPRPC,你不再需要為 AJax 程序中數據的安全性而頭痛,也不必為會話支持而苦惱,這一切 PHPRPC 都已經幫你自動完成了,你只需要關注具體的事務就可以了。用 PHPRPC 來做 AJax 安全編程,就是這麼簡單!

 

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved