回覆列表
  • 1 # 使用者2648018640748

    最簡單的實現就是用PHP的會話機制.

    使用者名稱和密碼驗證透過,就在伺服器設定一些SESSION值,比如:

    $_SESSION["login"] = "true";

    $_SESSION["user"] = "foo";

    來標記這個伺服器會話對應的瀏覽器的會話COOKIE.

    請求透過 if (isset($_SESSION["login"]) && $_SESSION["login"] === true ) 來判斷一個會話COOKIE是否已經登入.

    而要實現一套通用的使用者登入認證機制,那就不要用PHP的會話機制了,因為這個機制預設是PHP內建實現的基於單機檔案的和PHP序列化serialize格式的機制,其他語言拿到PHP這個會話COOKIE沒法驗證和使用(讀寫伺服器會話檔案).

    也就是需要設計另一套cookie或者token認證機制實現多語言通用,不管什麼語言,拿到這個cookie後,使用相同的解密演算法如aes-128-cbc解密得到cookie內容,取得cookie裡儲存的使用者資訊,如使用者編號(id)和使用者顏值(salt),然後根據使用者編號查詢資料庫,在比對資料庫裡的使用者salt和cookie裡的使用者salt,一致則透過cookie認證.這個資料庫使用者salt是在使用者註冊和修改密碼時重新生成的東西,用於給密碼加鹽,也用於參與到cookie認證.如果擔心使用者的salt洩露,還可以考慮給使用者的salt加一個系統的配置鹽再存到cookie中.

    為了避免每個請求驗證cookie時都查詢一次資料庫,可以考慮把使用者對應的顏值快取到Redis中:key(user:id:salt) => value(xxx)

  • 中秋節和大豐收的關聯?
  • 有什麼專業可以從零基礎開始學的?