4

私は、REST インターフェイスを Web サイトおよび iphone/Android/etc デバイスに公開する php/mysql バックエンドを構築する初期段階にいます。

同じアカウントを使用する複数のデバイスのセッションを処理するための「標準」または「ベスト プラクティス」が何であるかはよくわかりません。

これがどのように機能するかについての私の現在の考えは次のとおりです。

  1. 今のところ、MySQL を使用してセッションを保存します。次のようなセッション テーブルを使用します。

    id、session_id (ハッシュ)、user_id (int)、created (タイムスタンプ)、expire (タイムスタンプ)、device (列挙型)

  2. ユーザーが iOS アプリまたは Android アプリを介してログインすると、今後の API 呼び出しで使用するために、成功の json でセッション トークンが返されます。API呼び出しを行うWebサイトと同じです。

  3. セキュリティ上の理由から、ユーザーが再ログインした場合は、セッション トークンを再生成して上書きする必要がありますが、そのデバイスの session_id に対してのみです。

  4. また、セッションの有効期限を示す有効期限列もあるので、必要に応じて、2 週間で有効期限が切れ、CRON ジョブによって定期的にクリーンアップされるセッションを作成できます。

これは私には合理的なアプローチのように思えますが、ユーザーが iPhone と iPad を使用している場合、または同じアカウントを使用して複数の Android デバイスを使用している場合は問題があります。ユーザーが一方でログインすると、他方がログアウトされます。

別の iPhone からログインしても、instagram がセッションを無効にしないことに気付きました。

ただし、ユーザーが再ログインしたときにセッショントークンを上書きしたり、ユーザーがiPhoneからログインするたびにセッションテーブルにセッション行を追加したりしない限り、その動作を再現できないと思いますか?

異なるデバイス間でセッションを処理する標準的な方法は何ですか?

4

2 に答える 2

3

セッションの保存に mysql を使用しないことを強くお勧めします。redis または memcache を使用することをお勧めします。サーバーがクラッシュした場合に備えて、Redis はデータをディスクに保存します。Redis では、TTL を設定してセッションを期限切れにすることもできます。これにより、#4 が解決されます。

レストベースの呼び出しを使用している場合は、セッションをヘッダーに Cookie として追加し、それをやり取りすることをお勧めします。基本的に、ブラウザがそのページにアクセスする方法をエミュレートします。これで試験もやりやすくなると思います。

于 2012-08-30T21:17:16.640 に答える
1

あなたが探しているのは、伝統的に「セッション」と呼ばれるものではないようです。これは、通常、単一のブラウザーまたはクライアント インスタンスに限定されるものです。

アプリケーションの状態をユーザーログインに添付することについてもっと話しているようです。その場合、別のセッション テーブル/トークン システムが必要になる理由がわかりません。ログインを永続化する典型的なクライアント側のメソッドを使用するだけで、ログインしているクライアントが API に接続すると、実際のクライアント インスタンスに関係なく、アプリケーションの「セッション」状態情報が返されます。

これは、特定の期間非アクティブになった後にユーザーの状態を消去したい場合に、ユーザーに「新しい」トークンを与えるために、ある種のトークン交換システムを使用したくないということではありません。複数のアクティブなトークンを持つことができるということだけです。ログインごと。

于 2012-08-30T21:14:52.917 に答える