- 締切済み
2重ログインのチェック
Web上で動作するプログラムをJSPを用いて作成しているのですが、 2重ログインのチェックができないのです。 JSPのアプリケーション変数を使用すると思うのですが、 具体的に教えてくだされば助かります。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- hidebu-
- ベストアンサー率53% (45/84)
この質問の問題は解決したのでしょうか?
> session変数というのは同一ユーザーのページ(画面間)でやりとりする変数だと思っていたのですが、他のユーザーも参照することは可能なのですか? これは認識されている通りです。 他のユーザからは見れません。 どうも、私が2重ログインというの勘違いしていたようです。。。 ここで言われているのは、別ブラウザや別端末で同一ユーザがログインするのを 止めさせたいということですね? 私が考えていたのは、一度ログインしたユーザがページを移動してログインなどの 画面にやってきたときに、再びログイン画面が出て2重ログインになってしまう というのを避けたいのだと思っていました。。。 >> ログインしているユーザを他のユーザが確認したいような場合には、 >> HttpSessionにログイン済みであることを書き込んで、ServletContext >> にログインしているユーザのリストを書き込むような方法 > > また↑はsession.setAttribute("セッション変数名",ユーザー名などの値) > で行えばよいのでしょうか? これは、 あるユーザがログインしたときに、 session.setAttribute("セッション変数",ログイン済みを表すObject); List userList = (List)application.getAttribute("ログインリスト"); userList.add( "ユーザ名とか" ); application.setAttribute( userList ); としてやることを意味します。 ただし、この場合ユーザがログアウトした場合に、正しくapplicationの ユーザリストから削除してやらないと、サーバが終了されるまで、その ユーザはログインできなくなります。 また、ブラウザなどの場合、「×ボタン」が押されたことも想定しておく 必要があります。
> application変数はVectorクラスのように動的に増やすことは可能なのでしょうか? できません。 application というのはJSPで規定されているServletコンテナ(Tomcatとか)が 暗黙的に定義する変数で、ServletContextクラスのオブジェクトです。 これはNo.2でwatapenさんが言われているように、WEBアプリケーションで 1つしか存在しません。 また、application に追加するだけでは、例えば「A」という人が ログインしたときに、WEBアプリケーションに「A」という人がログイン済みで あることは知らせることができても、どのユーザが「A」という人なのかは分かりません。 ログインの情報を持たせるのはHttpSession(session変数)が多いです。 あるいは、クッキーに書き込んでも良いでしょう。 例えば、チャットのようなシステムのように、ログインしているユーザを 他のユーザが確認したいような場合には、HttpSessionにログイン済みで あることを書き込んで、ServletContextにログインしているユーザのリストを 書き込むような方法が考えられますね。
- watapen
- ベストアンサー率10% (5/48)
applicationはコンテキストに対してひとつしかないんじゃなかったかなぁ application にPropertiesでもつっこんでやるほうがいいのかも
- watapen
- ベストアンサー率10% (5/48)
applicationにユーザIdをつっこんで そこにあったらログインさせないっていうのはどうですか? この場合ログオフされたことを捕まえるために一工夫必要ですけど...
補足
はい、そのようにしたいのですが、application変数をアクセスユーザー分用意 しなければならないのでしょうか? application変数はVectorクラスのように動的に増やすことは可能なのでしょうか?
補足
session変数というのは同一ユーザーのページ(画面間)でやりとりする変数だと思っていたのですが、他のユーザーも参照することは可能なのですか? つまり、JSPではsession.getAttribute("セッション変数名"); で取得するのでしょうか? >ログインしているユーザを他のユーザが確認したいような場合には、HttpSessionにログイン済みであることを書き込んで、ServletContextにログインしているユーザのリストを書き込むような方法 また↑はsession.setAttribute("セッション変数名",ユーザー名などの値) で行えばよいのでしょうか?