Можно ли установить заголовки внутри выходного фильтра Apache? - PullRequest
0 голосов
/ 06 сентября 2018

Мы используем Apache 2.4 с mod_python, который используется для выходного фильтра, который переписывает некоторые выходные данные HTML. В настоящее время мы устанавливаем файлы cookie с использованием document.cookie в JS, но это не оптимально. В идеале мы хотели бы установить куки через заголовки. Мы пытались использовать filter.req.headers_out['SetCookie'] и Cookie.add_cookie, но безрезультатно.

Это вообще возможно? Если нет, то какой вариант лучше? Мы застряли с Apache 2.4 и mod_python в качестве наших единственных опций.


Доступные модули Apache:

загруженные модули:

  • access_compat_module (общий доступ)
  • alias_module (общий доступ)
  • auth_basic_module (общий доступ)
  • authn_core_module (общий доступ)
  • authn_file_module (общий доступ)
  • authz_core_module (общий доступ)
  • authz_host_module (общий доступ)
  • autoindex_module (общий доступ)
  • cgi_module (общий доступ)
  • core_module (статический)
  • deflate_module (общий доступ)
  • dir_module (общий доступ)
  • env_module (общий доступ)
  • expires_module (общий доступ)
  • filter_module (общий доступ)
  • headers_module (общий доступ)
  • http_module (статический)
  • include_module (общий)
  • log_config_module (общий доступ)
  • mime_module (общий доступ)
  • mpm_prefork_module (общий доступ)
  • модуль переговоры (общий)
  • php7_module (общий доступ)
  • proxy_http_module (общий доступ)
  • proxy_module (общий доступ)
  • python_module (общий доступ)
  • remoteip_module (общий доступ)
  • rewrite_module (общий доступ)
  • setenvif_module (общий доступ)
  • so_module (статический)
  • ssl_module (общий доступ)
  • substitute_module (общий доступ)
  • systemd_module (общий доступ)
  • unique_id_module (общий доступ)
  • unixd_module (общий доступ)
  • vhost_alias_module (общий доступ)
  • watchdog_module (общий доступ)

Как я сейчас пытаюсь установить куки (в dev):

def add_cookie(req, name, value, domain=None, expires=None):
    """Adds a cookie
    Arguments:
        req -- the request
        name -- the cookie name
        value -- the cookie value
        domain -- (optional) the domain the cookie is applicable to
        expires -- (optional) the time in minutes the cookie is set to expire, defaults to current session
    """
    cookie = Cookie.Cookie(name, value)
    # Always set the path to the root
    cookie.path = '/'
    # Set domain if present
    if domain is not None:
        cookie.domain = domain
    # Set expires if present
    if expires is not None:
        expires = int(expires)
        cookie.expires = time.time() + (60 * expires)
    # Add a freshly-baked cookie
    Cookie.add_cookie(req, cookie)

1 Ответ

0 голосов
/ 07 сентября 2018

Я понял это самостоятельно. Короткая версия, да, вы можете. Причина, по которой это раньше не работало, была в том, что я устанавливал файлы cookie неправильно. Я переместил этот бит из области обработки HTML (где он все равно не принадлежал) и поместил его непосредственно в метод outputfilter.

Надеюсь, это кому-нибудь поможет.

...