現在動いているシステムに、新たに複数ログイン禁止の設定を追加したいと考えています。
それで、以下の流れでシステムを作成しようと考えています。
(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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Chrome(クローム) Google Chrome の同期が必ず一時停止になってしまい困っています。 GoogleChrom 2 2023/02/04 16:45
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Chrome(クローム) Google Chrome の同期が必ず一時停止になってしまい困っています。 GoogleChrom 1 2023/02/05 09:59
- デスクトップパソコン Google Chrome の同期が必ず一時停止になってしまい困っています。 GoogleChrom 1 2023/02/05 19:19
- その他(セキュリティ) アカウントの乗っ取りで質問です。長いです。 先月ツイッターの乗っ取りにあい、アカウントを全て新しくし 2 2022/03/25 20:47
- ポケモンGO ポケモンgoのログイン画面からGoogleアカウントを消す方法を教えてください。 iPhoneです 1 2022/09/17 06:54
- LINE LINEの不正ログインについて パソコン等からのログインは拒否設定していますが、万が一スマホから不正 1 2023/06/18 12:49
- Chrome(クローム) 私の身に起こった摩訶不思議な出来事、これって不可抗力? 1 2023/06/22 05:13
- PHP 「ログイン機能を持たせる」説明が気難しいです。 2 2022/10/11 02:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のエクセルファイルを起動...
-
共有フォルダに誰が何にアクセ...
-
Batch: フォルダ内の特定のファ...
-
(Excelマクロ)datファイルをエ...
-
【Excel】[Expression.Error] ...
-
vbsでゴミ箱への移動
-
VBAでCSVファイルが使用中かど...
-
tmpファイル なぜできる?削除...
-
AccessVBAで作成したExcelファ...
-
社内Excel共有ブックでの保存ト...
-
Access VBA を利用して、フォル...
-
Excel VBA 処理後データが重た...
-
excelを共有ファイルにすると行...
-
テキスト内容の削除方法
-
access関数を説明できる方いま...
-
テキストエリアに入力された回...
-
【アクセス】「ほかのユーザー...
-
アクセスとワードへの差し込み印刷
-
Dream weaverで、誤ってファイ...
-
自動保存されない。何か設定が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共有フォルダに誰が何にアクセ...
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
XMLデータを変換し印刷する方法
-
AccessVBAで作成したExcelファ...
-
月が変わったら自動でシートが...
-
Access VBA を利用して、フォル...
-
tmpファイル なぜできる?削除...
-
excelを共有ファイルにすると行...
-
Excel VBA 処理後データが重た...
-
(Excelマクロ)datファイルをエ...
-
エクセルファイルのデータ転記...
-
社内Excel共有ブックでの保存ト...
-
大量のCSVデータを行列の変換を...
-
【アクセス】「ほかのユーザー...
-
ファイルの途中に文字列を挿入
-
拡張子が「cda」のファイルを聞...
-
CSVの項目行を削除して一つのフ...
おすすめ情報