5

我做了很多谷歌搜索,但找不到答案。我尝试在战争中的 web.xml 文件中设置以下内容,但没有影响:

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

在 tomcat context.xml 文件中添加 useHttpOnly 可以将 cookie 限制为仅 http,但我仍然需要使它们安全。

4

1 回答 1

4

你不必做任何事情。只要启动会话的请求是httpsTomcat 就会将会话 cookie 标记为secure.

我还查看了是否有任何正式记录该事实的内容,但我找不到。但这至少是 Tomcat 6.0.32 及更高版本的行为。

以下是在org/apache/catalina/connector/Request.java方法结束时检查请求是否安全的代码,如果安全,则secure在 cookie 上设置标志:

/**
 * Configures the given JSESSIONID cookie.
 *
 * @param cookie The JSESSIONID cookie to be configured
 */
protected void configureSessionCookie(Cookie cookie) {
    cookie.setMaxAge(-1);

    Context ctxt = getContext();

    String contextPath = null;
    if (ctxt != null && !getConnector().getEmptySessionPath()) {
        if (ctxt.getSessionCookiePath() != null) {
            contextPath = ctxt.getSessionCookiePath();
        } else {
            contextPath = ctxt.getEncodedPath();
        }
    }
    if ((contextPath != null) && (contextPath.length() > 0)) {
        cookie.setPath(contextPath);
    } else {
        cookie.setPath("/");
    }

    if (ctxt != null && ctxt.getSessionCookieDomain() != null) {
        cookie.setDomain(ctxt.getSessionCookieDomain());
    }

    if (isSecure()) {
        cookie.setSecure(true);
    }
}

更新:您可以手动尝试通过使用过滤器等自行设置。您可以查看从 set 'secure' flag 到 JSESSION id cookie的示例

于 2012-08-02T03:50:47.103 回答