Verifique se os cookies estão ativados

Estou trabalhando em uma página que requer javascript e sessões. Eu já tenho um código para avisar o usuário se o javascript estiver desativado. Agora, eu quero lidar com o caso em que os cookies são desabilitados, pois o ID da session está armazenado em cookies.

Eu pensei apenas em algumas idéias:

  1. Incorporando o ID da session nos links e formulários
  2. Avise o usuário que devem habilitar os cookies se eles estiverem desativados (precisaria de ajuda para detectar se os cookies estão desativados)

Qual é a melhor maneira de abordar isso? obrigado

EDITAR

Com base nos artigos relacionados, eu criei minha própria abordagem e pensei em compartilhar, outras pessoas poderiam usá-lo, talvez eu obtenha algumas críticas. (Assume suas lojas de session PHP em um cookie chamado PHPSESSID )

 
Content goes here
Sorry, but Javascript is required <!-- if(document.cookie.indexOf('PHPSESSID')!=-1) document.getElementById('form').style.display=''; else document.write('

Sorry, but cookies must be enabled

'); -->

JavaScript

Em JavaScript, teste simples para a propriedade cookieEnabled , que é suportada em todos os principais navegadores. Se você lida com um navegador mais antigo, você pode configurar um cookie e verificar se ele existe. (emprestado do Modernizador ):

 if (navigator.cookieEnabled) return true; // set and read cookie document.cookie = "cookietest=1"; var ret = document.cookie.indexOf("cookietest=") != -1; // delete cookie document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT"; return ret; 
  • Verificação de cookies do Modernizer
  • Verificando se os cookies estão ativados

PHP

Em PHP, é bastante “complicado”, pois você precisa atualizar a página ou redirect para outro script. Aqui vou usar dois scripts:

somescript.php

 < ?php session_start(); setcookie('foo', 'bar', time()+3600); header("location: check.php"); 

check.php

 < ?php echo (isset($_COOKIE['foo']) && $_COOKIE['foo']=='bar') ? 'enabled' : 'disabled'; 
  • Detectando se os cookies estão ativados com o PHP
  • PHP e Cookies, uma boa mistura!

Mas para verificar se os cookies estão habilitados usando isset ($ _ COOKIE [“cookie”]), você precisa atualizar. Estou fazendo isso de maneira (com sessões baseadas em cookies 🙂

 session_start(); $a = session_id(); session_destroy(); session_start(); $b = session_id(); session_destroy(); if ($a == $b) echo"Cookies ON"; else echo"Cookies OFF"; 

Uma abordagem transparente, limpa e simples, verificando a disponibilidade de cookies com o PHP e aproveitando o redirecionamento transparente AJAX , portanto, não desencadeia um recarregamento de página . Também não requer sessões.

Código do lado do cliente (JavaScript)

 function showCookiesMessage(cookiesEnabled) { if (cookiesEnabled == 'true') alert('Cookies enabled'); else alert('Cookies disabled'); } $(document).ready(function() { var jqxhr = $.get('/cookiesEnabled.php'); jqxhr.done(showCookiesMessage); }); 

(A chamada JQuery AJAX pode ser substituída pela chamada AJAX de JavaScript pura)

Código do lado do servidor (PHP)

 if (isset($_COOKIE['cookieCheck'])) { echo 'true'; } else { if (isset($_GET['reload'])) { echo 'false'; } else { setcookie('cookieCheck', '1', time() + 60); header('Location: ' . $_SERVER['PHP_SELF'] . '?reload'); exit(); } } 

Primeira vez que o script é chamado, o cookie é definido e o script informa o navegador para redirect para si mesmo. O navegador faz isso de forma transparente. Nenhuma recarga de página ocorre porque é feito dentro de um escopo de chamada AJAX .

A segunda vez, quando chamado por redirecionamento, se o cookie for recebido, o script responde um HTTP 200 (com a string “true”), daí a function showCookiesMessage é chamada.

Se o script for chamado pela segunda vez (identificado pelo parâmetro “recarregar”) e o cookie não for recebido, ele responde um HTTP 200 com string “falso” – e a function showCookiesMessage é chamada.

Você não pode no conjunto de carregamento da mesma página e verifique se os cookies estão configurados, você deve executar a página de recarregamento:

  • PHP executado no servidor;
  • cookies no cliente.
  • cookies enviados ao servidor somente durante o carregamento de uma página.
  • Apenas os cookies criados ainda não foram enviados para o servidor e serão enviados apenas na próxima carga da página.

JavaScript

Você poderia criar um cookie usando JavaScript e verificar se ele existe:

 //Set a Cookie` document.cookie="testcookie"` //Check if cookie exists` cookiesEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false` 

Ou você pode usar um plugin jQuery Cookie

 //Set a Cookie` $.cookie("testcookie", "testvalue") //Check if cookie exists` cookiesEnabled=( $.cookie("testcookie") ) ? true : false` 

Php

 setcookie("testcookie", "testvalue"); if( isset( $_COOKIE['testcookie'] ) ) { } 

Não tenho certeza se o Php funcionará, pois não posso testá-lo.

Você pode fazer um Ajax Call ( Nota : Esta solução requer JQuery):

example.php

 < ?php setcookie('CookieEnabledTest', 'check', time()+3600); ?>  

ajax.php

 $cmd = filter_input(INPUT_POST, "cmd"); if ( isset( $cmd ) && $cmd == "cookieCheck" ) { echo (isset($_COOKIE['CookieEnabledTest']) && $_COOKIE['CookieEnabledTest']=='check') ? 'enabled' : 'disabled'; } 

Como resultado, aparece uma checkbox de alerta que mostra que os cookies são habilitados ou não. Claro que você não precisa mostrar uma checkbox de alerta, daqui você pode tomar outras medidas para lidar com cookies desativados.

é fácil detectar se os cookies estão ativados:

  1. definir um cookie.
  2. pegue o cookie

Se você conseguir o cookie que você configurou, o cookie está habilitado, caso contrário, não.

BTW: é uma má idéia para Embedding the session id in the links and forms , é ruim para o SEO. Na minha opinião, não é muito comum que as pessoas não desejem ativar os cookies.

Aqui está um plugin javascript muito útil e leve para realizar isso: js-cookie

 Cookies.set('cookieName', 'Value'); setTimeout(function(){ var cookieValue = Cookies.get('cookieName'); if(cookieValue){ console.log("Test Cookie is set!"); } else { document.write('

Sorry, but cookies must be enabled

'); } Cookies.remove('cookieName'); }, 1000);

Funciona em todos os navegadores, aceita qualquer caractere.

Os cookies são do lado do cliente e não podem ser testados corretamente usando o PHP. Essa é a linha de base e cada solução é uma solução para este problema.

Significado se você está procurando uma solução para seu problema de cookie, você está no caminho errado. Não use o PHP, use um idioma de cliente como o Javascript.

Você pode usar cookies usando o PHP? Sim, mas você precisa recarregar para tornar as configurações no PHP visíveis.

Por exemplo: é possível testar se o navegador pode configurar Cookies com PHP simples ‘. A única resposta correta é ‘NÃO’.

Você pode ler um Cookie já configurado: ‘SIM’ use o $ _COOKIE predefinido (Uma cópia das configurações antes de iniciar a aplicação PHP).