我在身份验证servlet和我们的实际jsp之间遇到奇怪的问题。我们使用servlet来验证用户是否是有效用户,如果是,我们继续使用他们的referer url向HttpServletResponse添加一个cookie(这样可以将集成重定向到他们自己的登录页面)登出)。注销操作通过相同的servlet,并检索cookie,并且用户定向回存储的cookie URL。一切正常。
但是,在我的网站中,如果我打印出通过pageContext.getRequest()。getCookies()[或通过firebug的控制台]拉出的cookie,我根本找不到存储的cookie。实际上没有它的痕迹。但是,当您单击注销链接并被定向回到身份验证servlet时,会找到cookie,并且相应地重定向。
问题是,我需要以与注销相同的方式处理超时操作,但是超时检查是在jsp标记中的servlet外部。由于超时无法找到cookie,它只是使用标准的timout页面,集成客户不希望看到它。
有什么想法在这里发生了什么?
[ANSWER] 结果证明这是一个路径问题。我知道我没有粘贴任何代码,但是我在没有设置路径的情况下创建了cookie,因此cookie只在servlet目录中可见。一旦我设置了“/”路径,整个网站就可以看到cookie。
答案 0 :(得分:1)
当您说“在我的网站内”时,这是否意味着您的网站部署在不同的(子)域上?默认情况下,Cookie仅对其设置的主机可见,这意味着“www.example.com”设置的Cookie对“other.example.com”不可见。您可以通过明确指定cookie域为两者共同(例如“example.com”)来解决这个问题。
答案 1 :(得分:1)
你是如何进行此重定向的?
RequestDispatcher的forward方法接收请求和响应对象,可能是您已经使用过的对象。这意味着请求对象与您在Servlet中处理的HttpServletRequest对象相同。
答案 2 :(得分:0)
实际上,结果证明这是一个路径问题。我知道我没有粘贴任何代码,但是我在没有设置路径的情况下创建了cookie,因此cookie只在servlet目录中可见。一旦我设置了“/”路径,整个网站就可以看到cookie。