web-dev-qa-db-ja.com

Web /アプリへのログイン中にユーザーエージェント情報を保存する適切な方法は何ですか?

ご存知のとおり、Facebookはログインセッションを保存し、ログインした設定でそれらを表示できます。

現在は、IPアドレス電話名(電話でログインしている場合)およびアプリ名が電話に表示され、ブラウザ名)が表示されます。ブラウザを使用する場合。

PHPとJavaScriptを使用してこれらの情報をサイトに保存したい。1つの方法は、PHPの組み込み機能を使用してこの情報をユーザーが正常にログインしたときのDB。

しかし、そこには問題があります。この機能は文字列を提供し、ブラウザ名、OS名、デバイス名を抽出するのは難しいと思います。さらに、アプリでサービスにログインした場合、アプリ名は表示されません。

それを行うためのより良い、推奨される方法はありますか?このクライアント側を処理する方がいいのではないでしょうか。サーバーにリクエストを送信するクライアントは自身を送信しますデバイス名、OS名、その他の情報

2番目のオプションは私には良いようですが、それが実際にあるかどうかはわかりません。

2
Vikas

情報は常にクライアントから送信されます。もちろん、サーバーに情報を取得する方法は別の問題です。

User-Agent

HTTPクライアントがリクエストを行うとき、それ自体に関する情報がUser-Agentヘッダーに含まれる場合があります。たとえば、ブラウザには通常、ブラウザの名前とバージョンに関する情報、および基本的なOS情報が含まれています。

これはPHPの組み込み機能が読んでいるものです。1 残念ながら、これらの文字列の形式は標準化されていません。この情報の解析は難しい場合があり、おそらくライブラリに任せる必要があります。

アプリベースのログインを識別するには、アプリのHTTPクライアントにUser-Agentヘッダーを提供させるだけです。これを行う方法については、関連するドキュメントを参照してください。明らかに、サーバーで解析できることを確認する必要があります。

1ブラウザ/ OS情報用。 IPアドレスは別の問題です。

カスタム実装

または、より構造化されたメッセージ形式を定義し、それをログイン要求に含めることもできます(たとえば)。

これにより、送信される情報をより詳細に制御でき、サーバー側の解析が容易になります。欠点は、標準のHTTPヘッダーに依存するのではなく、追加のロジックを実装して維持する必要があることです。

私はこれを自分で行ったわけではありませんが、 表示されます カスタムのユーザーエージェント値をブラウザーに送信させることもできます。このようなことを行うクライアント側のライブラリを探すことも検討してください。もちろん、ブラウザのバージョンとアプリのバージョンに互換性があることを確認する必要があります。

どちらのオプションが優れていますか?

システム全体を知らないと、これに答えることは困難です。ただし、リクエストが標準ブラウザとアプリからのみ/ほとんどの場合発生すると予想される場合は、ユーザーエージェント文字列の解析から始めます。

情報がユーザーにとって本当に重要である場合、追加の作業が正当化される可能性があります。通常はブラウザから送信されないが、通常はJavaScriptを介して取得できる情報が必要な場合も、同じことが当てはまります。

いずれの場合でも、情報は信頼できないことに注意してください。実装する送信メカニズムに関係なく、どのクライアントも原則として何でも送信できます。

0
doubleYou

一般的に、必要がなければ、ホイールを再発明する必要はありません。特定のアプリケーションではなく、World Wide Webに関連するユーザーエージェントに関する情報を取得したい。だから、あなたのためにこれを行うことができる市販のソフトウェアコンポーネントを探してください。

PHPシェルフコンポーネントをインストールする標準的な方法は Composer であり、それらを見つけるための最良のWebサイトはおそらく Packagist です。 user agent parse の検索パックマジストいくつかの人気のあるPHP使用可能なライブラリが見つかりますユーザーエージェント文字列からブラウザ名、OS名、デバイス名を抽出します。

これらのいくつかの説明を確認し、そのうちの1つを使用してください。

0
bdsl