前と後の分離の終了または複数のWebアプリケーションをサポートするために、クッキーの使用上の元のセッションまたは大きな問題があるだろう
、我々はトークンを使用して
使用
1.バックエンドに確認コード[など]フロント着陸アカウントのパスワード情報を渡します
2.バックエンド認証ログイン情報、ユーザーにバインドされ、フロントに返却されたトークンのユニークなIDを生成します
3.後端に送信トークンヘッダ内のバッファ、各要求に格納されたトークン、またはURLの前端
4.比較のためにトークンから送信されたトークンの後端部の前端、有効期限を確認し、その結果、後端部に戻されます
データベース設計:
PHPコード:
// テストランディングか パブリック 関数cehckLogin(){ IF(空($この - >ヘッダ[ 'トークン' ])){ AException( 'トークンの検証が失敗した'、401 ); } $ユーザー =モデル( 'ユーザ') - > WHERE([=> 'トークン' $この - >ヘッダ[ 'トークン']]) - > ()を探す; IF(!$ユーザー){ AException( 'トークンの検証が失敗した'、401 ); } IF(ユーザー$ - > TOKEN_TIMEOUT < 時間()){ AException( 'トークンの有効期限が切れました'401 )。 } // トークン续期 $ code_out = 時間()+ 60 * 60 * 24 *コンフィグ( 'IAuth.token_time' ); モデル( 'ユーザ') - >ここで、([ 'トークン' => $この - >ヘッダ[ 'トークン']]) - >更新([ 'TOKEN_TIMEOUT' => $ code_out ])。 返す $ユーザーを - > のid。 } // 设置唯一的トークン のパブリック 静的の 機能 setAppLoginToken($ユーザID = ''真))); $ strの = SHA1($ strの。$ユーザーID ); 返す $ strのを。 }
// 更新トークン パブリック 関数 updateToken($ ID、およびトークン$、&$ TOKEN_TIMEOUT ){ $トークン = 0 。 $ TOKEN_TIMEOUT = 0 ; $コード = IAuth :: setAppLoginToken($ ID )。 $ code_out = 時間()+ 60 * 60 * 24 *コンフィグ( 'IAuth.token_time' ); $ RES = $この - >ここで、([ 'ID' => $ ID ]) - > 更新( [ 'トークン' => $コード、 'TOKEN_TIMEOUT' => $ code_out ] ); もし($ RES ){ $トークン = $コード。 $ TOKEN_TIMEOUT = $ code_out 。 } }