gpt4 book ai didi

perl - 在 Catalyst 中使用 Cache-Control header 时如何不发送 cookie?

转载 作者:行者123 更新时间:2023-12-01 13:37:08 25 4
gpt4 key购买 nike

我正在通过 Session 在我的 Catalyst 应用程序中使用 session , Session::Store::DBIC , 和 Session::State::Cookie .

我有一些 Controller 和方法用 Cache-Control: public 发送数据 header ,因此 Set-Cookie: 至关重要 header 不会与这些响应一起出现(否则,它会被缓存并发送给其他客户端,从而导致可能的安全问题)。我还没有找到实现这一目标的好方法。

我怎么知道SessionSession::State::Cookie不发送 cookie 以响应给定的请求?

最佳答案

做一点 RTFS,Session.pm覆盖 Catalyst 的 finalize_headers方法并通过相当深的调用链将cookie设置在那里:

finalize_header
⇒ _save_session_expires
⇒ session_expires
⇒ _extended_session_expires
⇒ extend_session_id (…::Session::State::Cookie)
⇒ update_session_cookie (…::Session::State::Cookie)

似乎没有任何方法可以将链中的任何内容标记为
停止。唯一的检查是 Cookie.pm 中的一个方法叫 cookie_is_rejecting它只是将配置的 cookie 路径与
请求路径。

因此,看起来最好的方法是将我自己的覆盖添加到
要么 update_session_cookiecookie_is_rejecting .我想我会
使用 cookie_is_rejecting .

这是我最终使用的代码。请注意,这相当笨拙,但它确实有效......
package Catalyst::Plugin::Session::State::Cookie::Sanity;
use base qw/Catalyst::Plugin::Session::State::Cookie/;

use MRO::Compat;

use strict;

sub cookie_is_rejecting {
my ($c, $cookie) = @_;

($c->stash->{cache_control_time} // 0) > 0
or $c->maybe::next::method( $c, $cookie );
}

1;

关于perl - 在 Catalyst 中使用 Cache-Control header 时如何不发送 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1177500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com