【问题标题】:Set multiple cookies in Apache在 Apache 中设置多个 cookie
【发布时间】:2013-05-17 00:34:56
【问题描述】:

我正在尝试使用 mod_header 在 Apache (2.2) 中设置两个 cookie,如下所示:

Header set Set-Cookie "poodle=noodle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"
Header set Set-Cookie "tweedle=puddle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"

但只有最后一个 cookie 被发送到浏览器。我做了一些搜索,但只发现有人遇到这个问题而没有解决方案。我尝试将它们合二为一:

Header set Set-Cookie "poodle=noodle;tweedle=puddle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"

同样的问题。我需要改用“标题附加”吗?任何示例将不胜感激。

【问题讨论】:

    标签: apache cookies mod-headers


    【解决方案1】:

    我会使用mod_rewrite 和cookie flag,语法是:

     [CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly] 
    

    所以你想要类似的东西:

    RewriteEngine On
    RewriteRule .* -  [CO=poodle:noodle:example.com:0:/:true:true]
    RewriteRule .* -  [CO=tweedle:puddle:example.com:0:/:true:true]
    

    【讨论】:

    • 效果很好,谢谢。直到现在我才注意到 mod_rewrite 文档的 [CO] 部分。
    【解决方案2】:

    根据 Apache 手册 http://httpd.apache.org/docs/current/mod/mod_headers.html#header,您应该使用 append:

    Header append Set-Cookie "poodle=noodle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"
    Header append Set-Cookie "tweedle=puddle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"
    

    或者根据HTTP使用逗号分隔多个值:

    Header append Set-Cookie "poodle=noodle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT, tweedle=puddle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"
    

    或使用Header add,如果您想避免在一个标头中使用逗号分隔的 cookie,以遵循 RFC 6265 第 3 节中的建议(如 @SteveC 所述):

    Header add Set-Cookie "poodle=noodle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"
    Header add Set-Cookie "tweedle=puddle;path=/;Secure;HttpOnly;Expires=Wed, Jan 01 2020 2:02:02 GMT"
    

    【讨论】:

    • 您是否在您的 Set-Cookie 条目上硬编码过期日期?你如何让它变得动态?
    • 您可以将 max-age 属性 (tools.ietf.org/html/rfc6265) 与秒一起使用,或者您对请求时间进行一些数学运算......但我不知道如何。
    • max-age 不适用于 IE11 或更早版本:mrcoles.com/blog/cookies-max-age-vs-expires/
    • 顺便问一下如何在 Set-Cookie 条目中动态设置过期时间:stackoverflow.com/q/29549963/1601989
    • 您不能使用Header append Set-Cookie,因为这只会将cookie 值附加到任何现有的Set-Cookie 标头中并带有逗号。这是 RFC6265 禁止的。
    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 2015-10-28
    • 1970-01-01
    • 2012-07-05
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多