Como dizer ao PHP para usar SameSite = None para cookies entre sites?

8

De acordo com o artigo aqui https://php.watch/articles/PHP-Samesite-cookies e documentação do PHP em https://www.php.net/manual/en/session.security.ini.php , existem apenas 2 possíveis opções de configuração para esse novo recurso, adicionado no PHP 7.3:

  1. session.cookie_samesite = Relaxado
  2. session.cookie_samesite = Estrito

No entanto, de acordo com o console do Chrome, isso precisa ser definido como "Nenhum":

Um cookie associado a um recurso entre sites no URL foi definido sem o SameSiteatributo Ele foi bloqueado, já que o Chrome agora entrega apenas cookies com solicitações entre sites se eles estiverem definidos com SameSite=Nonee Secure. Você pode revisar os cookies nas ferramentas do desenvolvedor em Aplicativo> Armazenamento> Cookies e ver mais detalhes em URL e URL.

Por esse motivo, não posso mais definir cookies entre sites. Qual é a solução alternativa?

Dane Iracleous
fonte

Respostas:

10

Você pode definir o valor como "Nenhum" usando ini_set. Não há como verificar se o valor é suportado quando essa função é usada:

ini_set('session.cookie_samesite', 'None');
session_start();

session_set_cookie_params também pode configurá-lo:

session_set_cookie_params(['samesite' => 'None']);
session_start();

O relatório de bug para que isso seja suportado no php.ini está aqui .

Anônimo
fonte
3
Obrigado - Consegui usar o código a seguir para se livrar da mensagem do Chrome e permitir que os cookies entre sites continuassem funcionando: session_set_cookie_params (['samesite' => 'None', 'secure' => true]);
Dane Iracleous
1
cuidado, samesite = none não é suportado em navegadores antigos e rejeitará o cookie completamente. verifique isso e certifique-se de excluir navegadores antigos ao definir um atributo de mesmo site para o cookie de sua sessão: chromium.org/updates/same-site/incompatible-clients
Volkan Ulukut
Configurando session.cookie_samesite = Nenhum no php.ini NÃO funcionou no PHP 7.3.15. Usar session_set_cookie_params como descrito acima funcionou.
humbads 17/03
1

Ruim:

session.cookie_samesite=None

Corrigir:

session.cookie_samesite="None"

Explicação aqui

vitaliytv
fonte
Não faça isso. Alguns navegadores estão com erros e rejeitam completamente os cookies com SameSite = None. Você precisa cheirar o UserAgent primeiro. Aqui está uma explicação do Google .
Diga
0

Este método pode ser útil para você

Adicione os atributos do cabeçalho nginxabaixo Secure+SameSite=None

local / {

proxy_cookie_path / "/; secure; SameSite = none";

}

Está trabalhando em mim!

Thanh Phong Đỗ
fonte