2016-04-27 13 views
0

私はいくつかのPHP、mysql、nodejs、socketioでチャットアプリケーションを構築しています。同じユーザーが異なる数のデバイスに複数のログインを許可し、セッションを処理する方法は?

私はユーザーがnomatterwhat numberデバイスからログインできるようにしたいと考えています。例えば、どの画面を見ているのかは関係ありません。それらはすべて最新の変更を反映しています。 これを今すぐテストしてみてください。 notifidationsを開くと、その番号は別のデバイスの同じページに消えます。

私の推測では、iedeaを念頭に置いてビルドを開始しました - ユーザーが初めてログインしたときに各ユーザーごとに部屋が作成され、同じユーザーからのその後のログインもその部屋に追加されます部屋に簡単に放送することができます。

すべてのブラウザは、変数multiloginを設定して部屋にソケットメッセージを送信するので、複数のログインを意識しています。 ユーザーがログアウトボタンをクリックしたときにその情報を送信するのを見る必要があります。 ログインしている唯一のユーザーであれば、セッションを終了してユーザーをオフラインにする必要があります。 1つのデバイスで実行されたアクションが、部屋の他のメンバーにブロードキャストされます。

論理と思われますか?

これまでのところ動作しますが、この設定のセッション部分については不明です。

チャットのオリジナルビルドから継承されたphpのロジック - ログインしているユーザーがログインしているかどうかを確認し、ログインしている場合は既存のセッションをまず破棄してからloggoutコマンドを送信しますmultiloginパラメータが他のブラウザに送られてくるのを防ぎます。

私の質問は今、セッションに向かって論理的なアプローチができますか?

私は頭の中でいくつかのアイデアを持って遊んでいました。そして、私は考えました、そのテーマについてインターネットで見てみましょう。

最初のログインがセッションを作成し、同じユーザーであると識別できるように他のユーザーにIDを送信することによって共有されるという考えがあります。

それが示唆するアプローチですか?

+0

なぜnode.jsとPHPの両方にタグが付けられていますか?あなたのサーバーはPHPかnode.jsですか? – jfriend00

+0

@ jfriend00元のチャット(ajaxChat)がPHPだったからです。私はイベントをトリガするためのnodejsとsocketioを導入し、一定間隔でクライアントによるポーリング(ajax呼び出し)を取り除きました。最終的に私は完全にPHPの部分を取り除きたい。しかし、私はそれが同じページ上の異なるデバイス/ブラウザ上にある単一ユーザを扱う方法の論理に影響するとは思わない。それは? – ingridsede

+0

特定のバックエンド環境を選択して質問を対象にしない限り、回答を試みません。抽象的な答えではなく、具体的な答えを出すのが好きなので、抽象的な質問には一般的に答えません。また、ソリューションに使用するツールは、使用しているバックエンド環境に固有のものです。 – jfriend00

答えて

0

他のユーザーに送信する新しいセッションID(セッションへのソケットメッセージ)を取得してログインする同じユーザーを持つ各デバイスに、そのセッションIDが同じになるようにすることで、サーバーに認証されるという単純な解決策が見つかりました。セッションIDはその目的のために十分に保存されています。

関連する問題