- ベストアンサー
セッション管理について(同時にログインしたとき)
ASP.NETで開発をしているのですが、セッション管理について疑問です。 SQLサーバーを利用したForm認証を使っているのですが、二人のユーザが別々のマシンで同じID,パスワードを使ってログインすると、二人ともログインしてサイトを利用できてしまうのでしょうか? それとも後から入った人が有効となって先に入った人のセッションは切れるのでしょうか?(yahooとかのサイトでは他の場所からログインしましたので現在のセッションは無効となりました。みたいなメッセージが出たような・・・) あとからログインした人優先だとしたら、同時ログインでもOKなようにすることはできますか? また逆に同時ログインOKな状態だとすると、後からログインした人優先モードに変更できますか? ちょっとわかりにくいかもしれませんが、足りない情報がありましたら言ってください。追記にて情報を提示いたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
全部システムの作り込みによって可能です。 「セション=ログイン」と勘違いしていませんか? セションはリクエスト元(ブラウザ)とサーバで保持している情報を結びつけるための手法であって、ログインと言うのはあくまでリクエスト元の状態を表す言葉に過ぎません。 多くの場合、ログイン管理にセションを利用していますが、Cookieを使っているところも少なくありません。ただ、Cookieは改ざんすることが出来るのでセションを利用するところが多いだけです。 簡単に言うと、セションはログイン管理のための技術ではなく、ログイン管理を実現するためにセションが利用できるだけです。 ログインの管理方法と言ってもシステムにより多様です。システムの仕様からログイン管理をするにはどのような機能があれば良いのかを考えてみてください。 ついでに >「後からログインした人優先」の場合、先に入った人のセッションの強制切断の方法がわからないのです。 前述の用に考えると、セションを切るのではなく、「ログインしている」という情報さえ変更できればいいと思います。 例えば、ユーザIDをキーに自分のセションID(またはセション自身)が取得できる状態をログインしていると見なすと、セションIDさえ書き換えてしまえばログインしていない状態と見なすことが出来ます。 この場合、データ管理はDBを使ってもいいですが、HttpApplicationStateを使っても出来るかと思います。仕様を考えて最適な方法を選んでください。
その他の回答 (1)
- Gimli
- ベストアンサー率47% (9/19)
できてしまうのでしょうか、できますか、の前にどういう仕様か確認して、その仕様に沿って(そうなるように)作り込みする、とした方が安全じゃないでしょうか。 多分「後からログインした人優先」に落ち着くと思いますが、例えばログインした時の日時を利用する等すれば可能かと思います。
補足
実は両方のパターンを使い分けたいのです。 「後からログインした人優先」の場合、先に入った人のセッションの強制切断の方法がわからないのです。 DBからどこかのセッションデータを削除すればいいのでしょうか? またご指摘のログイン日時を利用するというのも詳しく教えていただけないでしょうか。 「同時ログイン可」の場合もどう設定すべきか教えていただけると助かります。設定だけでは無理でしたら、開発手法のアドバイスをいただけると助かります。 申し訳ありませんがよろしくお願いします
補足
うむむ~(;´Д`) 今まではASP.NETで開発していなかったので、ログイン時に一意なセッションIDを生成させ、データベースで管理していましたが、今回はASP.NETで開発してみようということになりセッション管理にForm認証というものがあるので、便利そうなので使ってみたのです。 セッションを管理することができれば、ログインも管理できるようになっているかと期待していたのですが、甘かったようですね(;つД`) ログイン時に払い出したセッションIDをDBに保存しておくことができればTempdbのStateテーブルの同じセッションID行を削除すればあとからログインした人優先にできそうなのですがTempdbにアクセスする方法や、セッションIDを取得する方法がイマイチわかりません。 もし、そのようなメソッドがあれば教えてください。 ダメならログイン管理は自前で作るしかないですね~(;つД`)