会话cookie没有被标记"安全"在Tomcat 6

时间:2015-09-25 15:24:41

标签: java session tomcat cookies

我尝试了几种不同的方法来获取会话cookie以保证"安全"国旗设置,但避风港能够让它工作。以下是我迄今为止尝试过的事情:

1。在web.xml

中使用

配置" secure"的标准方法会话cookie的cookie属性是在web.xml中应用以下配置 - 但这不起作用,因为只有7以上的Tomcat版本支持它。

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

2。在secure="true" server.xml

中设置<Connector>

我尝试了一些不同的连接器选项,如下所示,但它们都没有帮助:

<Connector port="8443" protocol="HTTP/1.1"
  SSLEnabled="true" maxThreads="150" scheme="https"
  secure="true" clientAuth="false" sslProtocol="TLS" />

3。手动重写cookie

我在过滤器中添加了以下代码,通过将其设置为自定义标头来重写JSESSIONID值。但是我仍然没有在我的cookie中看到安全属性。

String sessionid = request.getSession().getId();
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; secure");

我想我没有选择。我该怎么做才能将我的会话cookie标记为&#34; secure&#34;?

2 个答案:

答案 0 :(得分:0)

这在Tomcat 6中不起作用,因为<cookie-config>中的web.xml配置属性是在Servlet Spec 3.0中添加的,而Tomcat 6仅支持Servlet Spec 2.5。因此,如果您想使用<cookie-config>,则必须升级。 (无论如何你应该升级。此时Tomcat 6几乎处于维护模式,Tomcat 8已经稳定了很长一段时间。)

server.xml中,设置secure="true"不会改变任何内容,因为默认情况下TLS连接器已经设置了secure="true"

您没有确切地提到您正在运行的Tomcat 6版本,但是如果在创建cookie时连接是安全的,Tomcat实际上会自动设置Cookie的“安全”标志。

我的猜测是您的会话cookie是在用户使用安全连接之前创建的。当发生这种情况时,会话cookie需要保持“非安全”,否则会话可能无法正常工作。

您应该安排您的用户在创建会话之前开始使用TLS,并且您应该获得“安全”会话cookie。

答案 1 :(得分:0)

问题中的#2解决方案( secure =&#34; true &#34;)实际上有效。

这是我在tomcat 6.0.35上使用的内容:

    <Connector port="8091"
            secure="true" 
            acceptCount="25" 
            connectionTimeout="20000" 
            disableUploadTimeout="true" 
            backlog="25" 
            maxSpareThreads="75" 
            maxThreads="1024" 
            minSpareThreads="25" 
            emptySessionPath="true"
            maxPostSize="4194304"
            maxParameterCount="20000"

我注意到无论在连接器上启用SSL,它都能正常工作。