【问题标题】:Java Servlet/JSP Cookie DisconnectJava Servlet/JSP Cookie 断开连接
【发布时间】:2009-07-22 00:07:51
【问题描述】:

我在身份验证 servlet 和我们的实际 jsp 之间的 cookie 可见性方面遇到了一个奇怪的问题。我们使用 servlet 来验证用户是否是有效用户,如果是,我们继续向 HttpServletResponse 添加一个 cookie 及其引用 url(这样可以将集成重定向到他们自己的登录页面登出)。注销操作通过同一个 servlet,然后检索 cookie,并将用户定向回存储的 cookie url。这一切都有效。

但是,在我的站点中,如果我打印出通过 pageContext.getRequest().getCookies() [或通过萤火虫的控制台] 提取的 cookie,我根本找不到我存储的 cookie。从字面上看,它没有任何痕迹。然而,当您单击注销链接并被引导回身份验证 servlet 时,会找到 cookie,并进行相应的重定向。

问题是,我需要以与注销相同的方式处理超时操作,但超时检查在 servlet 外部,在 jsp 标记中。由于超时找不到cookie,它只是使用标准的超时页面,集成客户不想看到。

有什么想法吗?

[回答] 原来是路径问题。我知道我没有粘贴任何代码,但是我在没有设置路径的情况下创建了 cookie,因此 cookie 仅在 servlet 目录中可见。一旦我设置了“/”路径,cookie 就会在整个站点中可见。

【问题讨论】:

    标签: java jsp cookies


    【解决方案1】:

    当您说“在我的站点内”时,这是否意味着您的站点部署在不同的(子)域上?默认情况下,cookie 仅对设置它们的主机可见,这意味着从“www.example.com”设置的 cookie 对“other.example.com”不可见。您可以通过明确指定两者通用的 cookie 域来解决这个问题(例如“example.com”)。

    【讨论】:

    • 不,它们都在同一个域中。 servlet 驻留在它自己的目录中,而 jsp 页面是从根目录中提供的
    【解决方案2】:

    你是怎么做这个重定向的?

    RequestDispatcherforward 方法接受请求和响应对象,大概是您已经使用的对象。这意味着请求对象与您在 Servlet 中处理的 HttpServletRequest 对象相同。

    【讨论】:

    • 我实际上是在使用 HttpServletResponse 的 sendRedirect(...)。所以我会在验证和存储cookie后在servlet中使用它来重定向到主站点?我试试看。
    • 但是,即使没有重定向,进入任何后续页面也会丢失 cookie...仍在处理该部分。
    【解决方案3】:

    其实是路径问题。我知道我没有粘贴任何代码,但是我在没有设置路径的情况下创建了 cookie,因此 cookie 仅在 servlet 目录中可见。一旦我设置了“/”路径,cookie 就会在整个站点中可见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 2023-03-04
      相关资源
      最近更新 更多