我想確保我的Yii web服務爲iphone應用程序。如何通過會話處理來保護php -YII Weservices?
登錄不是強制使用系統,訪客用戶也可以使用系統。我想知道如何在服務器端實現會話處理來管理和驗證Web服務請求。用戶甚至可以從多個電話登錄他們應該被視爲不同的會議。我如何解決此..任何幫助將不勝感激。
謝謝!
我想確保我的Yii web服務爲iphone應用程序。如何通過會話處理來保護php -YII Weservices?
登錄不是強制使用系統,訪客用戶也可以使用系統。我想知道如何在服務器端實現會話處理來管理和驗證Web服務請求。用戶甚至可以從多個電話登錄他們應該被視爲不同的會議。我如何解決此..任何幫助將不勝感激。
謝謝!
由於連接將是無狀態的,因此無法使用會話來驗證用戶身份。 最好的辦法是在用戶驗證自己身份時生成用戶特定的令牌。 該令牌由服務器生成並與expiration_time一起存儲在數據庫(或文件)中。
然後,在所有其他請求中,用戶將發送他的令牌作爲請求中的參數。 在服務器端,您必須檢查:令牌是否存在並且尚未過期。
令牌生成的一個例子:
/**
* Generate a token to authentify the user in later api calls.
* @param string the secret needed to generate the token
* @return string the Token
*/
public static function generateToken($secret) {
$str = "";
for ($i=0; $i<8; $i++) {
$str .= Token::rand_alphanumeric();
}
return $str . md5($str . $secret);
}
/**
* Generate a random alphanumeric char.
* @return the char
*/
private static function rand_alphanumeric()
{
$subsets[0] = array('min' => 48, 'max' => 57); // ascii digits
$subsets[1] = array('min' => 65, 'max' => 90); // ascii lowercase English letters
$subsets[2] = array('min' => 97, 'max' => 122); // ascii uppercase English letters
// random choice between lowercase, uppercase, and digits
$s = rand(0, 2);
$ascii_code = rand($subsets[$s]['min'], $subsets[$s]['max']);
return chr($ascii_code);
}
和驗證:
/**
* Check if the token is valid (depending on user hash).
* @param string the secret used to generate the token
* @param string the token
* @return boolean if the token is valid or not
*/
public static function validateToken($secret, $str)
{
$rs = substr($str, 0, 8);
return $str == $rs . md5($rs . $secret);
}
取決於你的應用程序將要幹什麼,你可能不會需要登錄的用戶在網絡服務器上。例如,如果您想在打開應用程序時更新用戶提要(在iPhone應用程序中)或更改應用程序中的其他視圖,則可以使用帶有簡單加密密鑰系統的Web服務。
例如,在iPhone應用程序中,用戶將登錄並進行某種會話。當您在服務器上的URL的請求,你會通過用戶ID(如存儲在Web服務器上),以及它們的ID的加密值+密鑰,如:
http://mywebserver.com/webseriver/updatefeed?user_id=10&key=ccbe688c7a3e3e1ebbaec12da992ded5
在服務器然後你可以_GET $ user_ID的,並創建USER_ID的MD5哈希和密鑰:
if (md5($_GET['user_id']."mysecretkey") == $_GET['key']){
// valid request
}
與客人,你可以只發送USER_ID爲0
顯然,這不是一個對於每種場景都有足夠強大的解決方案,但對於簡單的web服務類型來說,這通常足夠好要求。希望它有幫助