![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在動いているシステムに、新たに複数ログイン禁止の設定を追加したいと考えています。
それで、以下の流れでシステムを作成しようと考えています。
(1)フラグ設定用のファイルを用意して、ログインした時にファイルへフラグを立てる。
*データベースを使用できないので、ファイルを使用。
(2)フラグが立っていれば、それ以降のログインを禁止にする。
(3)フラグが立っていなければ、ログインを許可する。
*この時、ログイン情報をセッション変数に保存する。
(4)ログアウトする時に、ファイルに持たせているフラグを消去する。
*この時、ログイン情報をセッション変数から削除する。
(5)ログアウトせずに放置していた場合、一定時間を過ぎると自動でログアウトする。
ただ、この時分からない事がありまして、
「自動でログアウトする時に、フラグの削除処理とセッション変数の破棄の指示をどのようにして出すのか?」
また、
「ログアウトせずにブラウザを閉じても自動でログアウトできるのか?」
という2点に調べています。
上記2点のことでアドバイスを頂けないでしょうか?
また、複数ログイン禁止の設定を行う際に、注意しておいた方がいい点などがあれば教えて頂けないでしょうか?
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
セッションやクッキーではなくファイルで判定してはどうでしょうか。
アクセスするさい、あるファイル、仮にfile.txtとします。
それが既に作成されていたら他の人がログインしている、
作成されていなければログインできる、です。
で、ログアウトする際にそのファイルを消す形です。
一方で延々とログインできなくなると困るので、
ログインできるか確かめる際、ファイルの作成日時を確認(filetime関数)し、一定時間より
旧ければログインしてもかまわないことにしちゃいます。
もっと完璧にしたいならJavaScriptと組み合わせで定期的に
延命を申請し、1分おきとかにファイル日時を新しくし続けたりとか。
回答ありがとうございます。
仕事のトラブルなどで、お礼を書くのが遅くなってしまいました。
アドバイス頂いたようにファイルが作成されているかで、
ログイン中かを判定する処理にしようと思います。
検索してみると、
同様の処理でログイン処理を行う方法があったので、
一般的にも使われている手法なんですね。
大変参考になりました。
ありがとうございます。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_09.png?e8efa67)
No.2
- 回答日時:
セッション管理をやったことがないひとが、自作するのはあまりに危険サイトだとありました。
自分もフラグと時間持つか、排他して複数ログインさせないぐらいしか浮かびませんでした。
できるだけPEARとかライブラリを利用しましょう。
No.1
- 回答日時:
>自動でログアウトする時に、フラグの削除処理とセッション変数の破棄の指示をどのようにして出すのか
まず、Sessionにログインされた時間を記録しておいて、PHPファイルにアクセスされる毎に現在時刻と照らし合わせて有効期限が来ているかどうかチェックすればよいと思います。ファイルのフラグも同様に時刻で管理しておくと良いと思います。
>ログアウトせずにブラウザを閉じても自動でログアウトできるのか
出来ません。
ブラウザは閉じたときに特段通信をせずプログラムを終了するだけですので、PHPスクリプトでは閉じたかどうかを判別出来ません。
ただしこの際、SessionのIDを記録してあるCookieを破棄してしまう(※1)ので、再度ブラウザを立ち上げてもログインされていない状態になってしまいます。すると何が起こるかといえば、ロックファイルが宙ぶらりんの状態で存在し続けることになります。
※1・・・setcookieなどでCookieに記録する際、有効期限を決めていれば自動的に破棄されず、有効期限がくるまでは保存します。
では、宙ぶらりんになってしまったロックファイルを削除する方法ですが、いわゆるガベージコレクトといったことなんですけど、
・PHPにアクセスされる毎にロックファイルが有効期限が過ぎているのに残っていないかを確認して過ぎているものは破棄する。(アクセスされる毎では処理が重いようであれば、乱数でも発生させて、一定確率で起こるようにする。)
・cronやタスクスケジューラなどを一定間隔で走らせて上記のようなファイルを削除するプログラムを走らせる。
といったところになります。
どちらにしても、正しくログアウト処理をせず、ブラウザを閉じられると、有効期限が過ぎ去るまでは絶対に誰もログインできないような状態になってしまうので、大分使い勝手が悪くなることは間違いないです。
ご回答ありがとうございます。
>>ログアウトせずにブラウザを閉じても自動でログアウトできるのか
>出来ません。
やはり、自動でログアウトするのは難しそうですね。
ログアウトせずにブラウザを閉じてしまう方が多いので、
その辺の処理をどうされているの皆さんの意見を聞けて参考になりました。
頂いたアドバイスを参考にして、一度プログラムを作成してみます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
共有フォルダに誰が何にアクセ...
-
Access2007でldbファイルが...
-
月が変わったら自動でシートが...
-
特定のエクセルファイルを起動...
-
VBAでCSVファイルが使用中かど...
-
FL StudioでMIDIファイル書き出...
-
スクリーンセーバーの「テクス...
-
key.binとは?
-
excelを共有ファイルにすると行...
-
拡張子が「cda」のファイルを聞...
-
相手のPCにVBAからメッセ...
-
M4A(AAC)のタグ編集について
-
WEBクエリが使えない場合のHPデ...
-
共有フォルダのアクセスログに...
-
最新のExcelデータを古いExcel...
-
ファイルの途中に文字列を挿入
-
【Excel】[Expression.Error] ...
-
Accessについて教えてください
-
Excelデータを別のExcelファイ...
-
『ファイルの上書きの確認』ダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
共有フォルダに誰が何にアクセ...
-
特定のエクセルファイルを起動...
-
VBAでCSVファイルが使用中かど...
-
Batch: フォルダ内の特定のファ...
-
AccessVBAで作成したExcelファ...
-
月が変わったら自動でシートが...
-
excelを共有ファイルにすると行...
-
(Excelマクロ)datファイルをエ...
-
Access VBA を利用して、フォル...
-
【アクセス】「ほかのユーザー...
-
Excel VBA 処理後データが重た...
-
tmpファイル なぜできる?削除...
-
社内Excel共有ブックでの保存ト...
-
mdbファイル フォームを開くと...
-
Access2007でldbファイルが...
-
Dream weaverで、誤ってファイ...
-
XMLデータを変換し印刷する方法
-
大量のCSVデータを行列の変換を...
-
ファイルの途中に文字列を挿入
おすすめ情報