我尝试了几种不同的方法来获取会话cookie以保证"安全"国旗设置,但避风港能够让它工作。以下是我迄今为止尝试过的事情:
web.xml
配置" secure"的标准方法会话cookie的cookie属性是在web.xml
中应用以下配置 - 但这不起作用,因为只有7以上的Tomcat版本支持它。
<session-config>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
secure="true"
server.xml
<Connector>
我尝试了一些不同的连接器选项,如下所示,但它们都没有帮助:
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true" maxThreads="150" scheme="https"
secure="true" clientAuth="false" sslProtocol="TLS" />
我在过滤器中添加了以下代码,通过将其设置为自定义标头来重写JSESSIONID值。但是我仍然没有在我的cookie中看到安全属性。
String sessionid = request.getSession().getId();
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; secure");
我想我没有选择。我该怎么做才能将我的会话cookie标记为&#34; secure&#34;?
答案 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,它都能正常工作。