2

私は JSP の初心者で、webapp の特定のページで、ユーザーがログインしているかどうかを判断しようとしています。これを行うには、セッションの存在を確認しています。セッションが存在しない場合は、ユーザーをログイン ページにリダイレクトします。

次のコードが

<%
if (null == session)
    out.println("session is null");
else
    out.println("session is not null");

if (null == request.getSession(false))
    out.println("request.getSession() is null");
else
    out.println("request.getSession() is not null");
%>

どのような状況でも、次の出力が生成されます。

session is not null request.getSession() is not null 

セッションを作成していないのに、なぜセッションが存在するのかわかりません。ユーザーがログインしているかどうかを確認するにはどうすればよいですか?

前もって感謝します。

4

5 に答える 5

4

デフォルトでは、コンテナによってセッションが作成されます。JSP用

<%@ page session="false" %>

JSP でのセッション作成を無効にします。

ユーザーが存在するかどうかを確認するには、ユーザーがログインした後、サーバー側のセッションにトークン/キーを配置する必要があります。

request.getSession().setAttribute("usertoken","authenticated");

JSPでは、属性が存在し、nullでないことを確認するだけです

if ("authenticated".equals(session.getAttribute("usertoken")) {
   // do something
}
于 2012-07-07T10:26:04.773 に答える
2

あなたのサイトを閲覧しているユーザーがいるときはいつでも、セッションがあります。ユーザーがログインしているかどうかのチェックは、「セッションの存在」に依存すべきではありません。それらは非常に異なる概念であるためです。

ユーザーがログインした瞬間にセッションオブジェクトにセッション属性を保存し、ログアウトしたときにそれを削除できます。ただし、「コンテナベースの認証」を構成することをお勧めします。これにより、セッションに属性を保存する必要がなくなり、リクエストメソッド「getUserPrincipal()」および「getRemoteUser()」を使用して、ユーザーがログインしているかどうか。さらに、この種の認証はより安全であり、JavaEE の原則に沿っていることが証明されています。

コンテナー管理認証をセットアップする方法についての説明を得るには、SO でこの他の質問を見ることができます: j_security_check を使用して Java EE / JSF でユーザー認証を実行する

于 2012-07-07T10:41:12.067 に答える
0

セッション全体が存在するかどうかを確認する代わりに、ユーザーをセッション属性にして、その存在を確認できます。

于 2012-07-07T10:29:46.810 に答える
0

Web コンテナーは、ユーザー セッションごとに一意のセッション ID を保持します。ユーザーが Web アプリケーションで別のページを要求すると、セッション ID が HttpSession オブジェクトと共にサーブレットに返されます。

HttpSession getSession() - このリクエストが有効な場合は常に、このリクエストに関連付けられた httpsession オブジェクトを返します。無効な場合は、新しいセッション オブジェクトが作成されます。

HttpSession getSession(boolean create) - 有効な場合はこのリクエストに関連付けられた httpsession オブジェクトを返しますが、無効な場合は「create」入力が「true」の場合にのみ新しいセッション オブジェクトを作成します。

于 2012-07-07T11:11:54.237 に答える