2009-07-16 12 views
0

認証サーブレットと実際のJSPとの間のCookieの可視性に奇妙な問題があります。サーブレットを使用してユーザーが有効なユーザーであることを認証している場合は、referer urlを使用してHttpServletResponseにCookieを追加します(これにより、統合は独自のログインページにリダイレクトされます)。ログアウト)。ログアウト操作は同じサーブレットを経由し、Cookieが取得され、ユーザーは保存されたCookie URLに戻るように指示します。これはすべて動作します。Java Servlet/JSP Cookie Disconnect

しかし、私のサイトでは、pageContext.getRequest()。getCookies()[またはFirebugのコンソール]で取得したCookieを表示しても、私が保存したCookieは見つかりませんでした。文字通りそれの痕跡はありません。それでも、ログアウトリンクをクリックして認証サーブレットに戻すと、Cookieが検出され、それに従ってリダイレクトが実行されます。

問題は、ログアウトと同じ方法でタイムアウト操作を処理する必要がありますが、タイムアウトチェックはJSPタグのサーブレットの外部にあります。タイムアウトはクッキーを見つけることができないので、統合している顧客が見たくない標準のタイムアウトページを使用しているだけです。

ここで何が起こっているのですか?

[回答者] これはパスの問題であることが判明しました。私はコードを貼り付けていないことを知っていますが、パスを設定せずにクッキーを作成していたので、サーブレットディレクトリ内にしかクッキーが表示されませんでした。 「/」のパスを設定すると、サイト全体でCookieが表示されます。

答えて

0

実際、これはパスの問題であることが判明しました。私はコードを貼り付けていないことを知っていますが、パスを設定せずにクッキーを作成していたので、サーブレットディレクトリ内にしかクッキーが表示されませんでした。 「/」のパスを設定すると、サイト全体でCookieが表示されます。

1

「自分のサイト内」と言えば、サイトが別の(サブ)ドメインに展開されているということですか?デフォルトでは、Cookieは設定されたホストからのみ表示されます。つまり、「www.example.com」から設定されたCookieは「other.example.com」には表示されません。両方に共通するCookieドメインを明示的に指定することで回避できます(例: "example.com")。

+0

いいえ、すべて同じドメインにあります。サーブレットは独自のディレクトリにありますが、jspページはルートから提供されます – Gopherkhan

1

どのようにこのリダイレクトを行っていますか?

RequestDispatcherのメソッドforwardは、要求オブジェクトと応答オブジェクト(おそらく既に作業していたオブジェクト)を受け取ります。つまり、リクエストオブジェクトは、サーブレットで処理していたのと同じHttpServletRequestオブジェクトです。

+0

私は実際にはHttpServletResponseのsendRedirect(...)を使用しています。だから私は、サーブレットで認証して、クッキーを保存した後、メインサイトにリダイレクトするために使用したいと思いますか?やってみます。 – Gopherkhan

+0

それはうまくいった。ありがとう。 – Gopherkhan

+0

しかし、その後のページに行くと、リダイレクトしなくてもクッキーが失われます...まだその部分で作業しています。 – Gopherkhan