httpOnly Session Cookie + Servlet 3.0(例如 Glassfish v3)

Posted

技术标签:

【中文标题】httpOnly Session Cookie + Servlet 3.0(例如 Glassfish v3)【英文标题】:httpOnly Session Cookie + Servlet 3.0 (e.g. Glassfish v3) 【发布时间】:2011-03-03 06:41:28 【问题描述】:

默认情况下,Glassfish v3 不会在会话 cookie 上设置 httpOnly 标志(当像往常一样使用 request.getSession() 创建时)。

我知道,有一个方法 javax.servlet.SessionCookieConfig.setHttpOnly(),但我不确定这是否是最好的方法,如果是,最好的地方是放置那条线。

顺便说一句,当然它不能在 servlet 本身中完成(例如在 init() 中):

java.lang.IllegalStateException: PWC1426: 
Unable to configure httpOnly session tracking cookie property for 
servlet context /..., because this servlet context has already been initialized

一般来说,我更喜欢使用配置选项,例如在 web.xml 中。

【问题讨论】:

【参考方案1】:

这是通过 Servlet 3.0 web.xml 支持的(请参阅 web-common_3_0.xsd):

<web-app>
  <session-config>
    <cookie-config>
      <!--             
        Specifies whether any session tracking cookies created 
        by this web application will be marked as HttpOnly
      -->
      <http-only>true</http-only>
    </cookie-config>
  </session-config>
</web-app>

【讨论】:

谢谢,成功了! (我只查看了 web-app_3_0.xsd,并没有意识到架构使用 &lt;xsd:include schemaLocation="web-common_3_0.xsd"/&gt; @chris_l 不客气。我也不知道,我在谷歌搜索时注意到了:) 如何在 web.xml 中声明 web-common_3_0.xsd?我将 web.xml 升级到 3.0 java.sun.com/xml/ns/javaee" xmlns:xsi="w3.org/2001/XMLSchema-instance" xsi:schemaLocation="java.sun.com/xml/ns/javaee web-app_3_0.xsd" version="3.0">跨度> 【参考方案2】:

您也可以添加&lt;secure&gt;true&lt;/secure&gt; 以提高安全性。

<session-config>
    <cookie-config>
        <http-only>true</http-only> 
        <secure>true</secure>
    </cookie-config>
</session-config>

【讨论】:

安全标签出于某种原因向我发送了 ViewExpiredException。我错过了什么?

以上是关于httpOnly Session Cookie + Servlet 3.0(例如 Glassfish v3)的主要内容,如果未能解决你的问题,请参考以下文章

用javascript能不能提取httponly属性的cookie

在 PHP 中的 PHPSESSID cookie 上设置 httpOnly 和安全

浅谈HTTP Cookie 的 Secure 和 HTTPONLY属性

浅谈Cookie、HttpOnly那点事儿

如何为cookie设置HttpOnly

cookie中数据无法读取,HttpOnly属性