現在動いているシステムに、新たに複数ログイン禁止の設定を追加したいと考えています。
それで、以下の流れでシステムを作成しようと考えています。
(1)フラグ設定用のファイルを用意して、ログインした時にファイルへフラグを立てる。
*データベースを使用できないので、ファイルを使用。
(2)フラグが立っていれば、それ以降のログインを禁止にする。
(3)フラグが立っていなければ、ログインを許可する。
*この時、ログイン情報をセッション変数に保存する。
(4)ログアウトする時に、ファイルに持たせているフラグを消去する。
*この時、ログイン情報をセッション変数から削除する。
(5)ログアウトせずに放置していた場合、一定時間を過ぎると自動でログアウトする。
ただ、この時分からない事がありまして、
「自動でログアウトする時に、フラグの削除処理とセッション変数の破棄の指示をどのようにして出すのか?」
また、
「ログアウトせずにブラウザを閉じても自動でログアウトできるのか?」
という2点に調べています。
上記2点のことでアドバイスを頂けないでしょうか?
また、複数ログイン禁止の設定を行う際に、注意しておいた方がいい点などがあれば教えて頂けないでしょうか?
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
セッションやクッキーではなくファイルで判定してはどうでしょうか。
アクセスするさい、あるファイル、仮にfile.txtとします。
それが既に作成されていたら他の人がログインしている、
作成されていなければログインできる、です。
で、ログアウトする際にそのファイルを消す形です。
一方で延々とログインできなくなると困るので、
ログインできるか確かめる際、ファイルの作成日時を確認(filetime関数)し、一定時間より
旧ければログインしてもかまわないことにしちゃいます。
もっと完璧にしたいならJavaScriptと組み合わせで定期的に
延命を申請し、1分おきとかにファイル日時を新しくし続けたりとか。
回答ありがとうございます。
仕事のトラブルなどで、お礼を書くのが遅くなってしまいました。
アドバイス頂いたようにファイルが作成されているかで、
ログイン中かを判定する処理にしようと思います。
検索してみると、
同様の処理でログイン処理を行う方法があったので、
一般的にも使われている手法なんですね。
大変参考になりました。
ありがとうございます。
No.2
- 回答日時:
セッション管理をやったことがないひとが、自作するのはあまりに危険サイトだとありました。
自分もフラグと時間持つか、排他して複数ログインさせないぐらいしか浮かびませんでした。
できるだけPEARとかライブラリを利用しましょう。
No.1
- 回答日時:
>自動でログアウトする時に、フラグの削除処理とセッション変数の破棄の指示をどのようにして出すのか
まず、Sessionにログインされた時間を記録しておいて、PHPファイルにアクセスされる毎に現在時刻と照らし合わせて有効期限が来ているかどうかチェックすればよいと思います。ファイルのフラグも同様に時刻で管理しておくと良いと思います。
>ログアウトせずにブラウザを閉じても自動でログアウトできるのか
出来ません。
ブラウザは閉じたときに特段通信をせずプログラムを終了するだけですので、PHPスクリプトでは閉じたかどうかを判別出来ません。
ただしこの際、SessionのIDを記録してあるCookieを破棄してしまう(※1)ので、再度ブラウザを立ち上げてもログインされていない状態になってしまいます。すると何が起こるかといえば、ロックファイルが宙ぶらりんの状態で存在し続けることになります。
※1・・・setcookieなどでCookieに記録する際、有効期限を決めていれば自動的に破棄されず、有効期限がくるまでは保存します。
では、宙ぶらりんになってしまったロックファイルを削除する方法ですが、いわゆるガベージコレクトといったことなんですけど、
・PHPにアクセスされる毎にロックファイルが有効期限が過ぎているのに残っていないかを確認して過ぎているものは破棄する。(アクセスされる毎では処理が重いようであれば、乱数でも発生させて、一定確率で起こるようにする。)
・cronやタスクスケジューラなどを一定間隔で走らせて上記のようなファイルを削除するプログラムを走らせる。
といったところになります。
どちらにしても、正しくログアウト処理をせず、ブラウザを閉じられると、有効期限が過ぎ去るまでは絶対に誰もログインできないような状態になってしまうので、大分使い勝手が悪くなることは間違いないです。
ご回答ありがとうございます。
>>ログアウトせずにブラウザを閉じても自動でログアウトできるのか
>出来ません。
やはり、自動でログアウトするのは難しそうですね。
ログアウトせずにブラウザを閉じてしまう方が多いので、
その辺の処理をどうされているの皆さんの意見を聞けて参考になりました。
頂いたアドバイスを参考にして、一度プログラムを作成してみます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
Batch: フォルダ内の特定のファ...
-
共有フォルダに誰が何にアクセ...
-
Excel VBA 処理後データが重た...
-
仕事のファイルを共有フォルダ...
-
AccessVBAで作成したExcelファ...
-
テキスト内容の削除方法
-
大量のCSVデータを行列の変換を...
-
tmpファイル なぜできる?削除...
-
Access VBA を利用して、フォル...
-
CSVの項目行を削除して一つのフ...
-
Accessセキュリティ設定でのバ...
-
amifldrv64.sysについて教えて...
-
社内Excel共有ブックでの保存ト...
-
特定のフォルダに入れたファイ...
-
(Excelマクロ)datファイルをエ...
-
ホームページ作成中に溜まる不...
-
httpの画像urlが作りたいんです...
-
Accessのエラー対処法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
共有フォルダに誰が何にアクセ...
-
特定のエクセルファイルを起動...
-
VBAでCSVファイルが使用中かど...
-
Excel VBA 処理後データが重た...
-
Access2007でldbファイルが...
-
Batch: フォルダ内の特定のファ...
-
excelを共有ファイルにすると行...
-
【アクセス】「ほかのユーザー...
-
(Excelマクロ)datファイルをエ...
-
AccessVBAで作成したExcelファ...
-
Access VBA を利用して、フォル...
-
tmpファイル なぜできる?削除...
-
WEBクエリが使えない場合のHPデ...
-
mdbファイル フォームを開くと...
-
Dream weaverで、誤ってファイ...
-
月が変わったら自動でシートが...
-
拡張子が「cda」のファイルを聞...
-
社内Excel共有ブックでの保存ト...
-
vbsでゴミ箱への移動
おすすめ情報