プロが教えるわが家の防犯対策術!

現在動いているシステムに、新たに複数ログイン禁止の設定を追加したいと考えています。
それで、以下の流れでシステムを作成しようと考えています。

(1)フラグ設定用のファイルを用意して、ログインした時にファイルへフラグを立てる。
*データベースを使用できないので、ファイルを使用。
(2)フラグが立っていれば、それ以降のログインを禁止にする。
(3)フラグが立っていなければ、ログインを許可する。
*この時、ログイン情報をセッション変数に保存する。
(4)ログアウトする時に、ファイルに持たせているフラグを消去する。
*この時、ログイン情報をセッション変数から削除する。
(5)ログアウトせずに放置していた場合、一定時間を過ぎると自動でログアウトする。

ただ、この時分からない事がありまして、
「自動でログアウトする時に、フラグの削除処理とセッション変数の破棄の指示をどのようにして出すのか?」
また、
「ログアウトせずにブラウザを閉じても自動でログアウトできるのか?」
という2点に調べています。

上記2点のことでアドバイスを頂けないでしょうか?
また、複数ログイン禁止の設定を行う際に、注意しておいた方がいい点などがあれば教えて頂けないでしょうか?

宜しくお願いします。

A 回答 (3件)

セッションやクッキーではなくファイルで判定してはどうでしょうか。


アクセスするさい、あるファイル、仮にfile.txtとします。
それが既に作成されていたら他の人がログインしている、
作成されていなければログインできる、です。
で、ログアウトする際にそのファイルを消す形です。
一方で延々とログインできなくなると困るので、
ログインできるか確かめる際、ファイルの作成日時を確認(filetime関数)し、一定時間より
旧ければログインしてもかまわないことにしちゃいます。

もっと完璧にしたいならJavaScriptと組み合わせで定期的に
延命を申請し、1分おきとかにファイル日時を新しくし続けたりとか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
仕事のトラブルなどで、お礼を書くのが遅くなってしまいました。

アドバイス頂いたようにファイルが作成されているかで、
ログイン中かを判定する処理にしようと思います。

検索してみると、
同様の処理でログイン処理を行う方法があったので、
一般的にも使われている手法なんですね。

大変参考になりました。
ありがとうございます。

お礼日時:2009/11/04 09:41

セッション管理をやったことがないひとが、自作するのはあまりに危険サイトだとありました。



自分もフラグと時間持つか、排他して複数ログインさせないぐらいしか浮かびませんでした。
できるだけPEARとかライブラリを利用しましょう。
    • good
    • 0

>自動でログアウトする時に、フラグの削除処理とセッション変数の破棄の指示をどのようにして出すのか


まず、Sessionにログインされた時間を記録しておいて、PHPファイルにアクセスされる毎に現在時刻と照らし合わせて有効期限が来ているかどうかチェックすればよいと思います。ファイルのフラグも同様に時刻で管理しておくと良いと思います。

>ログアウトせずにブラウザを閉じても自動でログアウトできるのか
出来ません。
ブラウザは閉じたときに特段通信をせずプログラムを終了するだけですので、PHPスクリプトでは閉じたかどうかを判別出来ません。
ただしこの際、SessionのIDを記録してあるCookieを破棄してしまう(※1)ので、再度ブラウザを立ち上げてもログインされていない状態になってしまいます。すると何が起こるかといえば、ロックファイルが宙ぶらりんの状態で存在し続けることになります。

※1・・・setcookieなどでCookieに記録する際、有効期限を決めていれば自動的に破棄されず、有効期限がくるまでは保存します。

では、宙ぶらりんになってしまったロックファイルを削除する方法ですが、いわゆるガベージコレクトといったことなんですけど、
・PHPにアクセスされる毎にロックファイルが有効期限が過ぎているのに残っていないかを確認して過ぎているものは破棄する。(アクセスされる毎では処理が重いようであれば、乱数でも発生させて、一定確率で起こるようにする。)
・cronやタスクスケジューラなどを一定間隔で走らせて上記のようなファイルを削除するプログラムを走らせる。

といったところになります。
どちらにしても、正しくログアウト処理をせず、ブラウザを閉じられると、有効期限が過ぎ去るまでは絶対に誰もログインできないような状態になってしまうので、大分使い勝手が悪くなることは間違いないです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>>ログアウトせずにブラウザを閉じても自動でログアウトできるのか
>出来ません。
やはり、自動でログアウトするのは難しそうですね。
ログアウトせずにブラウザを閉じてしまう方が多いので、
その辺の処理をどうされているの皆さんの意見を聞けて参考になりました。

頂いたアドバイスを参考にして、一度プログラムを作成してみます。

ありがとうございます。

お礼日時:2009/11/04 09:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!