• ベストアンサー

閉じるボタン「×」を制御したい

PHPを使って作業している者です。 windowの閉じるボタンが押された場合、イベントを起こす方法はありませんか? どうしたいのかを具体的にいいますと、 ユーザーのログイン、ログアウトの情報をPHPを介してMysqlのデータベースで管理しています。 閉じるボタン「×」を押した場合、データベース内にあるユーザー情報を削除したいのです。 ログアウトボタンを押されずに退席し、データベース上にユーザー情報が残ったままになってしまうことを避けたいのです。 javascriptを併用してもかまわないので何とかならないでしょうか? 排他制御の一環として今回の質問内容を模索しているので、もっと別で効率のいい方法が有るとは思いますが、排他ロックをいまいち理解できないためデータベース上にユーザー情報の有無で制御してしまおう考えてのことです。 よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちわ。 想像で回答してすみませんが…。 javascriptでonunloadか何かで画面を閉じるイベントを取得できます。 イベントを取得したらAJAX(だったかな?)でphpで処理をさせたらいかがですか? 閉じずにほかのページに遷移してしまったことも考えられますので #1さんのようじ時間で見るのもいいかと思います。 すごい曖昧ですみません・・・

k_keep2007
質問者

お礼

amountainblast様、回答ありがとうございます。 onunloadのイベントハンドラは使えそうですね。 ショートカット(alt + w)にも対応しているのは驚きでした。 PCの電源そのものが落ちたり、フリーズしてしまったら、等の穴はありそうですが今回の私の仕様にはかなり近いものがあります。 AJAXを理解しておらず、PHPへの連動~処理のやり方に困っていますが、イベント自体を発生させることはできました。 今からPHP処理へ連動できるよう模索してみます。 ありがとうございました。

その他の回答 (1)

  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.1

PHPはサーバー側で動作するので、クライアント側のウインドウを閉じる動作を拾うことはできません。 JavaScriptを使っても、たとえば電源断などのような場合には対応できないので無意味でしょう。 多くのサイトではある程度の時間ログインがなかった場合に自動的にログアウトさせてしまっていると思いますが、そのような方向性ではいかがでしょうか。

k_keep2007
質問者

お礼

Gizensha様、早い回答ありがとうございます。 やはり、windowの制御では無理がありそうですね。 >多くのサイトではある程度の時間ログインがなかった場合に自動的にログアウトさせてしまっていると思いますが、そのような方向性ではいかがでしょうか。 なるほど。ちょっとその方向で検討してみます。 ですが、PHP上だけであればセッションやクッキーの時間を指定してしまえば値のクリアは簡単だと思いますが、MysqlのDBでも時間でのクリアは可能でしょうか?(そもそもセッションでは同一マシン限定の制御になってしまいますよね。。。)

関連するQ&A

  • JDBCでのトランザクション・排他制御

    初めまして。 まだ初心者の身なのですが質問させてもらいます。 サーブレット・jspでJDBCを使いデータベースとの処理を行って簡単なショッピングサイトのようなものを作っています。 まずsetAutocomit() = falseでトランザクションを開始し データベースのUPDATEを行って、最後に確定する場合comit キャンセルする場合rollbackとしています。 しかし1人のユーザーがトランザクションを行っている場合に他のユーザーからアクセスされた場合にデータベースのトランザクション中の値を取ってきたいのですが、どうしてもトランザクションでUPDATEされる前の値になってしまうのです。 これを防止するのが排他制御というものだというのは分かったのですが 実際のやり方については、結構調べたのですがあまり載っていませんでした。 データベースはMySQLを使っています。 よろしければJDBCでの排他制御についてのアドバイス、もしくは詳しく説明されているサイトなどございましたら是非教えてください。 よろしくお願いします。

  • 質問させてください。

    質問させてください。 学校の授業で、phpとMySQLでネットショップを作成しています。 複数のユーザーからMySQLのデータベースに書き込みを行う際に、phpで明示的に排他制御命令を指示する必要はあるのでしょうか? 学校の先生は必要みたいなことを言っているのですが、ネットで調べる限りはMySQL内で自動的に行っているように思えます。 使用しているエンジンはMyISAMです。 以上よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 排他制御。

    現在ASPで作成しているプロジェクトでは ページが三つあります。 1ページ目でデータを選択し、排他をかける。 2ページ目でデータを更新して、 3ページ目で排他を解除しています。 この際2ページ目でページを閉じられた場合、 排他を解除しなくてはならないのですが なにかいい方法はありませんか? また、ブラウザの戻るボタンを押されたときにも 排他を制御しなくてはなりません。 なにか判断する方法はないでしょうか?

  • 関数内の排他制御について

    いつも的確な回答に助けられていますm( __ __ )m 以下のようなメソッドがあるとします。 function test() { 処理1: データベースから値を取得 処理2: 処理1 で取得した値に +1 する 処理3: 処理2 の結果をデータベースに書き込む } 【質問】 関数 test がクライアント A と B の2人からほぼ同時にアクセスされた時、以下のような事が起きてしまうと思います。 ・ A が 処理1 を実行 ・ A が 処理2 を実行 ・ B が 処理1 を実行 ・ A が 処理3 を実行 ・ B が 処理2 を実行 ・ B が 処理3 を実行 当然データベースにある値は期待通りの値ではないと思います。 期待する動きとしては、A が関数 test の全ての処理を抜けるまで B は入り口で待機させるというようなことを想像しているのですが、 こういった場合、どのように排他制御したら良いのでしょうか? 私は C# で排他制御を実装した経験があるのですが、 C# では同期オブジェクトを用意して lock を使ったり、 ManualResetEvent などを用いることで排他制御が可能でした。 PHP でそれらに匹敵するようなものは存在するのでしょうか?

    • 締切済み
    • PHP
  • mysqlの設定&php+javascript(ajax)

    今javascript(ajax)とphpとmysqlで多言語チャットを作っているんですが退出するときにwindowを消したら退出しデータを消したいんですがmysqlにどのような設定をすればmysqlのデータを消していいのかわかりません。 htmlに<body onUnload="window.location='logout.php'">というコードを書いてlogout.phpは作ったんですが、mysqlのデータを消すのに個人に絞ることがどうやるのかという事がわかりません。 ちなみにmysqlで自分はchat(nick(入ったときのニックネーム)、time(入った時間)、words(チャットのコメント))というテーブルとmembers(nick(入ったときのニックネーム)、time(入った時間)というテーブルを使っています。

  • PHPデータベース・テーブルの移行

    PHPとMySQLを使ってサイト構築しています。 MySQLのデータベース「group_color」にはテーブル「pink」とテーブル「blue」があります。 サイトでログインしている会員ユーザーの情報が「pink」に入っていてユーザーが ”ブルーグループに変更する”というボタンを押すと、テーブルpinkに入っている情報がテーブルblueに移行するようにしたいのですが、PHPの表記はどのようになりますか? 「ログインしている会員の情報」を移行させたいです。 テーブルのフィールドは ・id ・name ・birthday となっています。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • JAVASCRIPT禁止でのボタン&リンク制御について

    C言語、CGIでボタン制御について教えて下さい。  (apacheを使用してます。JAVA SCRIPTは、使用禁止です。) CGI画面からボタンを連続で3回押下した場合に 最初の1回目、または、3回目のPOSTだけを有効にしたい場合 どうすればできますか?アドバイスください。 下記の方法は自分なりに方法を考えました。  (1)セッション管理     1 CGI全てのPOST、GET指定に、       セッションID(ユニーク)を付加させる。         ID+time     問題点:        いつセッションIDの生成するのか?、        いつセッションIDをチェックするのか?、        いつセッションIDを削除するのか?        自分自身わかっていません。  (2)セマフォ制御     CGIのmain関数の開始と終了で排他制御をする。     問題点:セマフォ制御をCGI自身にしていいものなのか?      URL:セッション管理 http://memo.blogdns.net/session.html

    • 締切済み
    • CGI
  • ネットで商品を注文した値を使ってシステム制御

    現在、卒業研究をしている学生です。 以下のようなシステムを構築したいのですがアドバイスお願いします。 (1)クライアントがネットで顧客情報を登録し、商品を注文するとサーバ内のデータベースから在庫が減り、注文情報が社内PCに送られる。 (2)社内PCで受け取った値をマイコンへシリアル通信し、システム制御をしたい。 (3)社内PCからデータベースへアクセスして在庫管理がしたい。 HPはHTMLとPHPで作るつもりです、データベースはMySQLがいいかなと思っています。 社内PCのシステム制御用アプリケーションはどの言語(VB、Javaそれとも?)を使用した方がいいですか? クライアントとサーバ間の通信はわかりますが、サーバから社内PCへ情報の送信の仕方がわかりません。 よろしくお願いします。

  • トグルボタンの排他制御でご教授ください。

    いつもお世話になっております。 エクセル2003のマクロVBAで、トグルボタンの排他制御を行っております。 ひとつのフレーム上の二つのトグルボタンの制御は、MSのサンプルソースを参考に以下のようなソースを作成して、制御できております。 教えて頂きたい内容は、同じようにひとつのフレーム上に、二つのトグルボタンを追加して、排他制御を行いたいたく検討しています、できれば、以下の ExclusiveToggleButtons() を使いたいと思っていますが、for ループのフレーム名が固定です。 フレーム名を可変にすれば、共用できるのではないかと思っていますが、なかなかうまくいきません、よい方法がありましたら、ご教授願います。 --- 標準モジュール ------------ start --- Sub ExclusiveToggleButtons() Dim my_toggle As Control ' Loop through all the ToggleButtons on Frame1. For Each my_toggle In myStartForm.my_MonthChoice_Frame.Controls ' If Name of ToggleButton matches name of ToggleButton ' that was clicked... If my_toggle.Name = my_Clicked_But Then '...select the button. my_toggle.Value = True Else '...otherwise clear the selection of the button. my_toggle.Value = False End If Next --- 標準モジュール ------------ end ---

  • 生成したHTMLをボタンクリックで保存させたい

    いつもお世話になっています。 ユーザーがフォームに入力した内容を、ボタンを押すことでHTMLファイルとして保存できるようにしたいと考えています。 PHPで実現することは可能でしょうか。JavaScriptなどと併用しなければ無理ですか? もし良い方法があれば、サンプルを書いていただけると、とてもとても助かるのですが… どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう