質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • PHP

    24036questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Ajax

    1327questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • Webサイト

    1279questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

  • サーバ

    881questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • アルゴリズム

    500questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

チャットの未読数管理

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 692

teratech

score 11

お世話になります。
チャット機能の付いたwebアプリケーションを構築しております。
仕様と開発環境は、以下になります。

[仕様]
・未読チャット数が表示される
・複数の人が同アカウントに同時にログインできる
・PCで使用される

[開発状況]
・サーバーサイド:
言語はPHP, データベースはリレーショナルDBです。
アカウント毎に未読数も保存しています。

・クライアントサイド:
ajaxで未読数を監視し、変更があればhtmlを書き換えてます。
未読チャットを開くと未読数をリセットしています。

[困っていること]
Aさん、Bさん、Cさんが、同時にアカウント#0001でログインしているとします。
この場合、Aさんが未読チャットを開いてしまうと、BさんとCさんの未読表示数も0となってしまいます。
同時にログインしているAさんは0通、Bさんは4通、Cさんは2通・・・のように、その時にログインしている人毎に未読数を表示するにはどういった方法がベストなのでしょうか。
なお、初回ログイン時は全数が表示、それを開いた後はログイン状態を保っている限り、自身の未読数が表示されるという形にできればと思います。

[検討したこと]
アカウントを分けるのが分かりやすいのですが、ログインする人は不特定多数のため、その人毎にアカウントを発行できない現状です。
sessionやlocalStorageに自身の未読数をセットする方法がいいかと考えておりますが、何か良い方法があればアドバイス頂ければ幸いです。

宜しくお願い申し上げます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

要求と仕様が相いれないので
どう頑張ってもユーザの意図した未読数が出ないケースが
多々出てくるかと思います。
無理に対応しようとすると、おそらくバグの温床になります。

とした上で、例えば、
websocketを利用し、サーバからpushする。
未読数の算出はクライアントで行う。
サーバで未読は管理しない。

あとは本当に未読として管理が必要か?
新着(1時間以内投稿)通知でもいいのでは?
要求に対して提案できる立場であれば、やってみる価値はあるかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/23 18:20

    ご回答頂きまして、ありがとうございます。
    kunai様にコメントした内容において、新着があった時にlocalStorageに更新分をpushするところでwebsocketを使えるかもしれませんね。
    websocketを使用したことがないので、勉強してみます。

    キャンセル

+1

仕様に問題があるので、アカウントを分ける事を考えるのが一番だと思いますが。。

どうしてもやるのであれば、有効期限が年単位等長期間のCookieを発行し、サーバで生成したユニークID的なものをCookieに格納して、以後はそのIDで未読管理を行うとかですかね。
ただ、Cookieなのでブラウザが変われば別モノになりますし、Cookieが消えると全部が未読になるなど、あまりお勧め出来ない仕様ですが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/23 18:14

    ご回答頂きまして、ありがとうございます。
    私もアカウントをなんとか分けたいのですが・・・

    どうしてもやる場合、以下はどう思われますか?
    ・データベースには全チャット数を格納、更新していく。
    ・クライアント側では、ログイン時にlocalStorageに全チャット数を格納し、1回チャットを開いた後はlocalStorageに格納されている数と、データベースに格納されている数との差分を表示する。(初回はチャットされているものがあるとだけ示すのみ)

    なお、ブラウザは指定されておりますので、ブラウザを変える可能性は考慮しなくて問題ございません。

    キャンセル

同じタグがついた質問を見る

  • PHP

    24036questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Ajax

    1327questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • Webサイト

    1279questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

  • サーバ

    881questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • アルゴリズム

    500questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。