• 締切済み

退室されずにページを落ちた時の処理

現在チャットを作ってるのですが基本的なチャットシステムはほぼ完成しました。 ですが解決しにくいバグが残っています。 モード0で入室画面 モード1でチャット画面 モード2で退室画面 です。 クッキーはモード判定するクッキーと、ユーザーのチャットの設定のクッキーの2つを発行しています ●各画面の処理の仕方ですが入室画面は ・名前入力欄に""(何も表示していなかったり)、" " "," "."(スペースと,と.)のみで構成された名前はチャット画面に入れない ・また入室メンバー名と同じ名前ではチャット画面に入れない ・クッキーの発行はチャットの設定のクッキーはチャット画面に入れなかった場合発行 ・モード判定のクッキーはチャット画面に入れる時に発行 ・30秒、1分、3分、5分でページの自動更新を設定できるようにしてあるため、モード判定のクッキーはそれぞれ30秒、1分、3分、5分たったら自動的に消えるように時間を設定 ●チャット画面 ・チャット画面に入った直後のみ、メンバー名(IPとリモートホストも同時に)のファイルに記録 ・もちろん入った直後はメンバー名のファイルに書いたとしてもそのままでは画面に反映しないので、入力された内容を表示して問題無いようにする ・退室ボタンを押した時に退室画面にいける ・30秒、1分、3分、5分でページの自動更新を設定できるようにしてあるため、モード判定のクッキーはそれぞれ30秒、1分、3分、5分たったら自動的に消えるように時間を設定 ・自動更新したらその都度30秒、1分、3分、5分たったら自動的に消えるようクッキーを発行する ・チャットの設定のクッキーは発言されるたびに再取得する。(珠樹つなぎ式) ●退室画面 ・チャットの設定のクッキーを発行しないためそのままの状態で残す ・モードの判定のクッキーは即座に消えるよう設定 ・メンバー名の書かれたファイルから入室者のメンバー名(IPとリモートホストも)を消す という処理をしています。 ユーザーがチャットを終える時に退室画面に行ってくれれば私としては問題がなくてラッキーなのですが、退室画面に行ってくれずにページを閉じちゃってチャットを終えられたら2つ問題があります。 ■問題1 チャット画面で退室されずにページを閉じた直後、すぐさまページを開くとチャット画面から開始してしまうバグ ・珠樹つなぎの形で自動更新を持続させてるため当然なのですが、ページを閉じたらモード指定のクッキーを消す方法 ・もしくは、最初にページを見られた時にモード指定のクッキーを消す方法 ・もしくは、それ以外でページを閉じたら入室画面にいけて、自動更新した時はチャット画面にいける方法 はないでしょうか? ■問題2 チャット画面で退室されずにページを閉じられたら、メンバー名がいつまでも残ってしまうバグ ・1分毎にメンバーがチャット画面にいるかいないか判定する方法(一定期間たっても発言しなかったらチャットにいないと判定されないようにする) ・もしくはページを閉じたら、メンバー名のかかれたファイルから即座にメンバー名を消す方法 ・もしくはそれ以外でページを閉じたら、メンバー名のかかれたファイルからメンバー名を消す方法 はないでしょうか? この2つのバグを何とかできたら基本のチャットシステムは完成なので(残りは面しろ機能をどんどん追加するだけ・・・っと言うよりはさっさと次のプログラムを作った方がいい気もするけれど)是非教えてくださいませ。 (また新たなバグが見つかったら対処しないといけませんが) それとチャットを今まで作った感想ですが、ただのチャットを作るのにもいろんな処理を施す事が分かりました。 機能を一つ追加するだけでも結構勉強になりますしね。 まともなチャットを一つでも作ることはプログラムの勉強に大いに役立つと思います。 いろいろ考えないと思った物が出来ませんしね。

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

・1時ぐらいに時間を設定して、1時間以上ロムされればユーザー管理から名前を消す(現実的かも、だけど最終発言から1時間名前が消えてくれない) ・5分に時間を設定して、5分以上ロムされればユーザー管理から名前を消す(他ユーザーは不思議がる) ・手動更新そのものを廃止する(う~~~ん悩む)  もNo.2の回答ですむはずです。難しくしないこと、利用できる環境変数は使うこと。

全文を見る
すると、全ての回答が全文表示されます。
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

チャットデータ number(time),username,comment,IP,userAgent ユーザーデータ userName,loginTime,logoutTime,lastGetTime,cookieData ユーザーから要求があると、 HTTP_COOKIE,HTTP_REFERER,REMOTE_ADDR,HTTP_USER_AGENT,PATH_INFO を解析します。 HTTP_COOKIE  ・前回データを受け取ったときのタイムスタンプ  ・userName  ・パスワード  ・reflesh間隔 HTTP_REFERER  ・呼び出し元(継続していれば掲示板URL) REMOTE_ADDR,HTTP_USER_AGENT  ・ユーザー特定--特に必要ではない PATH_INFO  ・使用している掲示板  HTTP_COOKIEのタイムスタンプは、reflesh間隔と比較することで、「(無断)退室していたか」が分かります。 ※クッキーの有効期限は、十分長めにしておきます。通常は一ヶ月、もしくは制限なしで良いです。同じ名前(name)、ドメイン(domein)、パス(path)で発行されると上書きされます。  ポイントは、reflashされるたびに、userファイルを点検して書き直すだけでよいです。また、チャット画面が呼び出されるたびに使用中のuserデータはチェックしているはずですから、そのときに一定時間、ないし最後の要求時間にreflash間隔を加えたものを目安に、userファアルに退出を書き込み、画面には「***さんは退出された模様」とでも表示すれば良いです。 >ページを閉じたらモード指定のクッキーを消す方法  これはありません。cookieはサーバーからデータが送られてくるときの応答ヘッダに含まれているものですから >もしくは、最初にページを見られた時にモード指定のクッキーを消す方法  前述しましたが、name,domain,pathの値が同じでしたら上書きされます。 >もしくは、それ以外でページを閉じたら入室画面にいけて、  退出手続きをせずにブラウザを閉じてしまうと、ユーザーファイルの更新履歴との時間差が大きくなります。 >自動更新した時はチャット画面にいける  PATH_INFOとHTTP_REFERERと、HTTP_USER_COOKIEです。 たとえばチャットプログラムが hoge.com/chat  だとします。 userがはじめと訪問する場合はCOOKIEがありませんから、案内ページが表示されます。ここでユーザー登録をしてもらう。メールアドレスに確認画面のURLを送付するなり、他の手段を用いて検索エンジンなどのロボットや故意の悪戯を防止します。  ユーザー登録が済めばそれぞれの部屋の使用状況を表示しても良いでしょう。  その後、PATH_INFOによる部屋を選んで進みます。 <a href="hoge.com/chat/room1">部屋一</a>へ  ここで要求があれば、HTTP_REFERERはhoge.com/chatですから、玄関からの入室が分かりますから、該当する部屋のチャットデータとユーザーデータを作成し、cookieを発行してページを表示する。  通常のreflashは、hoge.com/chat/roome1からですね。PATH_INFOは/chat/roome1になります。  と言う風に進みます。  いきなり書き始めずフローチャートを書いてはじめたほうが効率的です。    

全文を見る
すると、全ての回答が全文表示されます。
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

 ⇒車輪の再発明( http://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E )のような気がしないでもないですが・・・  Cookieは要求時にブラウザがつけますし、応答時にサーバーが付与しますから都度書き換わります。  cookieと、最後のアクセス時間を照合すれば良いでしょう。  どのページから来たかは、HTTP_REERERで補足できるはずです。  ファイル自体は、追記していくだけです。   ・発言記録を時系列で積み上げていくファイル     表示プロセスでどれを表示するかを決めればよい   ・ユーザー管理のファイル  の二つを用意すれば良いです。二つを分けておくのが味噌

nanaka2223
質問者

お礼

っと今おもいついたのですが例えば利用者A、利用者Bの2人の利用者がいるとして たとえロムを続けたとしても、自動更新時に記録に残せますよね そして途中でページを閉じてしまった場合、自動更新時に記録した時間が最後にアクセスした時間で一番長くても5分ですから、それ以上の時間記録がなければ名前を消すという処理を行えば、確かにユーザー管理ファイルからユーザー名を消せますね。 ただ、それは誰かがページを利用してたらの場合・・・ああ、誰かがページを見たときにユーザー管理のファイル名から最後の記録から5分以上立った人がいた場合、名前を消す処理をすればいいんだ ただタイミング悪く入れ違いで入ってきたらおかしなバグと思われるかもしれませんが、問題2はほぼ解決ですね 問題は30秒、1分、3分、5分といいましたが時間がない手動更新の場合はどうするの? って事ですね その点は質問時に全く触れませんでしたが ユーザーが手動更新を選んだ場合、どうするかの解決法 ・1時ぐらいに時間を設定して、1時間以上ロムされればユーザー管理から名前を消す(現実的かも、だけど最終発言から1時間名前が消えてくれない) ・5分に時間を設定して、5分以上ロムされればユーザー管理から名前を消す(他ユーザーは不思議がる) ・手動更新そのものを廃止する(う~~~ん悩む) ってところですね問題2はほぼ解決できました ありがとうございました 問題1は引き続きどうすればいいかの案をお願いします

nanaka2223
質問者

補足

広く受け入れられ確立されている技術や解決法を知らずに(または意図的に無視して)、同様のものを再び一から作ること」を意味する。 確立する技術はたしかに知りませんね 参考例が見つからないため(C言語で作ってるため) <<cookieと、最後のアクセス時間を照合すれば良いでしょう。 すみません ここのところをもう少しく説明していただけますか? 最後のアクセス時間の記録方法が分かれば2つの問題が解決すると思うので <<  ・発言記録を時系列で積み上げていくファイル     表示プロセスでどれを表示するかを決めればよい   ・ユーザー管理のファイル  の二つを用意すれば良いです。二つを分けておくのが味噌 この2つは用意してますよ

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • チャットの退室処理について

    ASPでチャットを作っています。 退室ボタンを押したときに退室処理用のaspファイルを呼び出すようにしました。 しかし、多くの利用者の方は、退室の時に×ボタンでチャット窓を閉じたり、 戻る・進むボタンや、お気に入りのリンク等から他のページへ飛んでいくようです。(つまり、退室処理のaspファイルが実行されない場合が多いです) 退室処理のaspファイルには、参加者名を記録するファイルから、退室した参加者名 を取り除く処理をさせています。ですから、このファイルを実行させたいのですが… ブラウザの閉じるボタンを押したときに、特定のファイルを開くようにするには どうしたらよいのでしょうか?(ポップアップ?のさせ方)

  • HPのアドレス統一?

    図を見てください チャットシステムを作るために処理の流れ図を書いたものです モード0が入室画面 モード1がチャット画面 モード2が退室画面 です。 図の上の様式が今まで私が作っている流れ図です。 モード0からモード1に移行するさいは、 ・名前が空白ではないかつNULLじゃない ・変数のモードに1が入る という条件でモード1に移行するようにさせました モード1から2に移行するさいは、退室ボタンを押す事で移行するようにしました そして問題が起きたのはここからです。 チャットに~秒たったら自動的に更新する機能をつけたら問題がおきました 自動更新したらモード1からモード0に戻ってしまうのです。 そのため、どうしたら自動更新したとしてもモード0に戻らずに1を続けるのか考えました。 そしたら下の図の処理を思いつきました。 入室画面のプログラムとそれ以外のプログラムを別にすれば例え自動更新してもモード1を繰り返すはずだと考えました。 しかし、そうなると別の問題が起きると考えました。 HPのアドレスが変わってしまうためにユーザーは入室画面からのみ入れたのが、入室画面だけでなく、チャット画面からも入れてしまうから問題だと思いました。 どのようにしたらチャット画面から入れるのを防ぐ事が出来ますか? ドメインという物があればHPのアドレスがどこを見ても同じになると聞きましたがドメインはCでどのようにすれば、作れますか?

    • ベストアンサー
    • CGI
  • お絵描きチャットですぐ退室させられてしまいます

    お絵描きチャットを設置したのですが、 入室は出来るもののすぐにもとのページに戻されます。 WindowsXpで、INSメイト-30DSUというモデムを使用してます。 ルータの設定等しなくてはならないのでしょうか・・? しかし、ルータをどこで設定するかもいまいち分りません;

  • チャットで蹴られて落とされないようにするにゎ?

    なぜかチャットしていると荒らしに蹴られて部屋から退室させられ、TOPページに戻る場合と画面が固まってしまいます。 落とされないようにするにゎどう設定すればいいですか? それとそういう落とし方ゎどうやってするんですか? やり方を知ってる人教えてください!!

  • ヤフーチャットにログインするのにものすごく時間がかかる

    ヤフーチャットで、入室したい部屋をクリックすると、 <チャットアプレットを起動中...アプレットの起動に失敗しウインドウが立ち上がらない場合は、ここをクリックしてリロードしてください。 > という画面が出たまま、4,5分後にやっと入室できます。リロードしても、メインウィンドウは真っ白のまま、同じです。また、入室しても一度退室してしまうと、またその繰り返しです。部屋から部屋への直接移動の場合は、問題ありません。 以前はこのようなことはなかったのですが、何が原因でしょうか?アプレットを削除→再インストールも行いました。 Me,128MB,Flets8M

  • ジャバスクリプトかもしれませんが・・・ページのソースを変えるとは?

    最近、チャットをしているのですが、 チャット内で数人、ソースを改造しているようです。 その効果はとても大きくて、まず、文字色が設定にない 色であることや、文字の大きさが、サイズ5までなのに、 それ以上の大きさになっていたりしています。 自分もしようと思っているのですが、 全く反映されません。 それをやっている人にたずねてみるものの、 そのチャットでそういうソースを改造している人は、 ある一人のリーダーから情報を得ていて、 その人が誰にも教えるなという命令を出しているようです。 個人でその改造をしている人もいたのですが、 その人に聞いてみたら、勉強しなさい の一言で終わらされてしまいました。 その人は、人が入室してきたら、自動で 「~~さんこんにちは。仲良くしましょう」 という発言が設定されている人でした。 そういうことを知っている人いませんでしょうか。 簡単に言うと、 「ページのソースを(HTMLタグのやつを)変えるにはどうすればいいんですか?」という質問です。

    • ベストアンサー
    • HTML
  • 特定のdirで発行したcookieを上のdirで参照できますか?

    特定のdirで発行したcookieを上のdirで参照できますか? クッキー発行では、PATHやドメイン等は設定しておらず、クッキー名とUserIDとPASSしか発行していないのですが、 PATHを設定した場合、クッキー値は、クッキーを生成したWebページ、同じディレクトリ内のWebページ、 同じディレクトリ内のサブディレクトリ内のWebページで参照が可能らしく、 省略時はCookie を設定したページのパス名になる。との事らしいのですが、 /A/a1/bbs.cgiへ認証した際に発行されたクッキー(クッキー名/ID/PASS)を /A/bbs.cgiで参照ってできますでしょうか。 上の階層である /A/bbs.cgi(同じCGIスクリプト)でクッキー情報を参照した場合、クッキー名だけが参照できている状況で困惑しています。 どなたか正しい情報をご掲示頂けませんでしょうか。宜しくお願い致します。

    • ベストアンサー
    • Perl
  • このページだけパスワードを保全してくれません

    ノートPCを代えてから マグマグの発行者ログインページで クッキーやファイルを削除してからログインを試みても パスワードを保存してくれなくて毎回毎回ログインが面倒です。 なぜここだけパスワード保存の画面が出てこないのでしょうか? ほかの発行スタンドではこのようなことはありません。 わかる方がいたら教えていただけますか?

  • 2SHOTチャットの待機中に自動で待ち受けする方法について

    2SHOTチャットの待機中の時に無発言時間が600秒を超えると強制的に閉鎖されてしまう為、4~5分毎に何かを発言しなければならず又、相手の方が入室したのも画面を開いていないと確認できないので、出来れば4~5分毎に自動で何かを発言してくれる機能を持ったソフトや、相手が入室したら教えてくれる機能のついたソフトがあれば相手の方が入室してくるまでの間、他の作業をしていられるので、そういった機能の付いたソフトがあれば教えてください。一部の2SHOTチャットでは初めからそういっ機能がついている良心的なサイトもありましたが、ほとんどのサイトでは無く、大変困っていますので誰か教えていただければと思います。

  • チャットで行方不明にならない方法

    以前からとあるサイトさまのチャットに参加していたのですが、最近引っ越しをしてからそのチャット「Whocares?(ttp://www.whocares.jp/)」に入室しても5分もたたないうちに行方不明になったりと会話が難しくなってしまいました。(ページが更新されない?というか行方不明になってもページが入室時のままなので自分では新しくページを開くなりしないと気づけなかったりします;)インターネットは通っているとこなので、ケーブルを繋いですぐパソコンは使えちゃんと接続されています。 環境がいけないのかPCの設定がいけないのか…機会に疎いので原因がどうしてか分からずとても困っています。どなたかもし「このせいなんじゃないか?」と少しでも分かる点があれば教えていただけると嬉しいです。よろしくお願いします…!(><)

【WRC-X6000QS-G】管理画面入れない
このQ&Aのポイント
  • ノートPCでWindows10を使用している際、ルーターの管理画面にアクセスできません。
  • プリンタがPCから認識されないトラブルはルーターのリセットで解決しましたが、管理画面へのアクセスはできません。
  • ネットワーク接続には問題がなく、固定IPに設定されていないため故障ではないと考えられます。
回答を見る

専門家に質問してみよう