如果您是任何類型的網絡開發人員,您會聽到這句話大概1000次:「HTTP是一種無狀態協議」。這意味着每個會話都與服務器和客戶端之間交換的令牌一起工作。
當您使用PHP內置的會話,服務器實際上做的正是這樣,即使你沒有意識到這一點:它會產生一個SESSION_ID並把它傳遞給客戶端。客戶端通常在cookie上傳回session_id令牌; PHP允許包括會話令牌還對URL,作爲一個GET參數,但我個人建議disabling that feature(默認情況下禁用PHP 5.3+)。
就你而言,是的,你將不會使用PHP的會話。
您在數據庫中創建一個存儲所有會話令牌和相關會話的表。
令牌應該有一個短的壽命(例如30分鐘),應該經常刷新。刷新不僅對於延長會話的使用壽命很重要(每刷新一次可以讓你多出30分鐘左右),而且還有助於防止會話密鑰被盜用。在我們創建的一些REST服務器中,會話令牌持續30分鐘,用戶在會話開始10分鐘後第一次請求時獲得新的令牌。當客戶發送新的令牌時,舊的令牌立即失效。
您可以在令牌傳遞到任何方式的服務器,而是將其添加爲GET參數是不是有兩個原因一個理想的解決方案:1。GET參數經常寫在服務器和2用戶的訪問日誌經常複製/粘貼URL並共享它們,並且可以公開其會話令牌。
對於API服務器,最好的方法是將會話令牌包含在HTTP請求的其中一個頭文件中。例如,您可以設置您的Authorization標頭:Authorization: SessionToken 123123123
其中123123123
是您的令牌,SessionToken
是一個字符串,用於告訴服務器使用您的授權方法(您可以自由選擇自己的名稱,只要它不是默認的名稱像Basic
這樣的方法;儘管一致!)。
API服務器的安全性通常通過使用SSL獲得。基本上,如果你有一個API服務器,你必須用HTTPS(SSL)保護它。
有些方法可以在不使用SSL的情況下實現安全性,但它們需要對每個請求進行簽名,並且實現和使用起來確實很複雜 - 而且它們添加的開銷可能比SSL更大。
如果我構建一個移動應用程序,我可以輕鬆添加授權標題?感謝您的有用評論 – 2014-10-10 16:27:41
@DiogoMendonça到目前爲止,我見過的每個庫都允許您輕鬆地在每個平臺上添加自定義標頭。這是一個非常標準的事情! PS:這個工具對開發很有幫助:http://www.getpostman.com – Qualcuno 2014-10-10 16:32:58
對不起,只是一個問題:用Nonce發送令牌更好嗎? – 2014-10-20 10:17:19