Perda de PHP perdida após o redirecionamento

Como resolvo o problema de perder uma session após um redirecionamento em PHP?

Recentemente, encontrei um problema muito comum de perder session após o redirecionamento. E depois de pesquisar este site, eu ainda não consigo encontrar nenhuma solução (embora isso tenha chegado o mais próximo).

Atualizar

Encontrei a resposta e pensei publicá-la aqui para ajudar alguém a enfrentar o mesmo problema.

Primeiro, realize essas verificações usuais:

  1. Verifique se session_start(); é chamado antes de qualquer session ser chamada. Então, uma aposta segura seria colocá-lo no início da sua página, imediatamente após a abertura da declaração < ?php antes de qualquer outra coisa. Certifique-se também de que não há espaços em branco / abas antes da declaração de abertura < ?php .
  2. Após o redirecionamento do header , termine o script atual usando exit(); (Outros também sugeriram session_write_close(); e session_regenerate_id(true) , você também pode tentar esses, mas eu usaria exit(); )
  3. Verifique se os cookies estão ativados no navegador que você está usando para testá-lo.
  4. Certifique-se de que register_globals esteja desligado, você pode verificar isso no arquivo php.ini e também usando phpinfo() . Consulte isso sobre como desligá-lo.
  5. Certifique-se de que não apagou ou esvazie a session
  6. Certifique-se de que a chave na sua matriz $_SESSION superglobal não é substituída em qualquer lugar
  7. Certifique-se de redirect para o mesmo domínio. Assim, redirect de um www.yourdomain.com para yourdomain.com não leva a session para a frente.
  8. Verifique se a extensão do arquivo é .php (acontece!)

Agora, estes são os erros mais comuns, mas se eles não fizeram o truque, o problema é mais provável de fazer com sua empresa de hospedagem. Se tudo funciona no localhost mas não no seu servidor de teste remoto, então isso provavelmente é o culpado. Então, verifique a base de conhecimento do seu provedor de hospedagem (também experimente seus fóruns, etc.). Para empresas como FatCow e iPage, eles exigem que você especifique session_save_path . Então, assim:

 session_save_path('"your home directory path"/cgi-bin/tmp'); session_start(); 

(substitua "seu caminho do diretório inicial" pelo seu caminho real do diretório inicial. Isso geralmente está no seu painel de controle (ou equivalente), mas você também pode criar um arquivo test.php no diretório raiz e digitar:

 < ?php echo $_SERVER['SCRIPT_FILENAME']; ?> 

O bit antes de 'test.php' é o caminho do diretório inicial. E, claro, certifique-se de que a pasta realmente existe dentro do diretório raiz. (Alguns programas não carregam pastas vazias ao sincronizar)

você deve usar “sair” após o encabeçamento-chamar

 header('Location: http://www.example.com/?blabla=blubb'); exit; 

Eu tentei todas as soluções possíveis, mas nenhum funcionou para mim! Claro, estou usando um serviço de hospedagem compartilhada.

No final, lembrei o problema usando “URL relativa” dentro do header de redirecionamento!

 header("location: http://example.com/index.php") 

anulou os cookies da session

 header("location: index.php") 

Trabalhou como um encanto!

Isso me perdeu por muito tempo (e esta publicação foi ótimo para encontrar!), Mas para qualquer outra pessoa que ainda não consiga sessões entre redirecionamentos de páginas para trabalhar … Eu tive que entrar no arquivo php.ini e ativar cookies :

 session.use_cookies = 1 

Eu pensei que as sessões funcionavam sem cookies … de fato, eu sei que elas DEVEM … mas isso corrigiu meu problema pelo menos até eu entender o que está acontecendo na imagem maior.

Eu encontrei esse problema em uma página específica. Eu estava configurando $ _SESSION valores em outras páginas logo antes de redirect e tudo estava funcionando bem. Mas esta página em particular não estava funcionando.

Finalmente percebi que, nesta página em particular, estava destruindo a session no início da página, mas nunca iniciando novamente. Então, minha function de destruição mudou de:

 function sessionKill(){ session_destroy(); } 

para:

 function sessionKill(){ session_destroy(); session_start(); } 

E tudo funcionou!

Eu tive o mesmo problema. Trabalhei nisso durante várias horas e isso me deixou louco.

No meu caso, o problema foi um 404 chamado devido a falta de favicon.ico apenas no Chrome e no Firefox. Os outros navegadores funcionaram bem.

Tive um problema semelhante, embora meu contexto fosse um pouco diferente. Eu tinha uma configuração de desenvolvimento local em uma máquina cujo nome de host era windows e o endereço IP era 192.168.56.2 .

Eu poderia acessar o sistema usando qualquer uma das seguintes opções:

Depois de efetuar o login, meu código PHP redirectia usando:

 header('http://windows/'); 

Se o nome de domínio anterior usado para acessar o sistema não era o windows , os dados da session seriam perdidos. Resolvi isso alterando o código para:

 header('http://'.$_SERVER['HTTP_HOST'].'/'); 

Agora funciona independentemente do nome de domínio local ou endereço IP que o usuário coloca.

Espero que isso possa ser útil para alguém.

Eu estava tendo o mesmo problema. De repente, algumas das minhas variables ​​de session não persistiriam para a próxima página. O problema acabou por ser (em php7.1) a localização do header não deve ter WWW nele, ex https: // mysite . está ok, https: //www.mysite . perderá as variables ​​de session dessas páginas. Nem tudo, apenas essa página.

Tive o mesmo problema e encontrei a maneira mais fácil. Eu simplesmente redirecionado para um redirecionamento .html com 1 linha de JS

 < !DOCTYPE html>    

em vez de PHP

 header_remove(); header('Location: admin_login.php'); die; 

Eu espero que isso ajude.

Love Gram

Se você estiver usando session_set_cookie_params() você pode querer verificar se você está passando o quarto param $secure como true . Se você é, então você precisa acessar a url usando https.

O parâmetro $secure está sendo verdadeiro significa que a session só está disponível dentro de uma solicitação segura. Isso pode afetá-lo localmente mais do que nos estágios ou ambientes de produção.

Mencioná-lo porque acabei de gastar a maior parte de hoje tentando encontrar esta questão, e isso é o que resolveu para mim. Acabei de ser adicionado a este projeto e ninguém mencionou que precisava de https.

Então, você pode usar https localmente, ou você pode definir o parâmetro $secure para FALSE e usar o http localmente. Apenas certifique-se de configurá-lo de volta à verdade quando você pressiona suas mudanças.

Dependendo do seu servidor local, talvez você precise editar DocumentRoot no httpd-ssl.conf do servidor para que sua URL local seja atendida https.

Outro motivo possível:

Esse é o espaço de armazenamento do meu servidor. O espaço do disco do meu servidor fica cheio. Então, removi alguns arquivos e pastas no meu servidor e tentei.

Foi funcionado !!!

Estou guardando minha session no AWS Dynamo DB, mas ainda espera algum espaço no meu servidor para processar a session. Não tenho certeza por que !!!

Eu também tive o mesmo problema com o redirecionamento não funcionando e tentei todas as soluções que eu poderia encontrar, meu redirecionamento de header estava sendo usado de uma forma.

Eu resolvi isso colocando o redirecionamento de header em uma página de php diferente ‘signin_action.php’ e passando os parâmetros de variables ​​através de eu queria em parâmetros de url e depois reatribuí-los no formulário ‘signin_action.php’.

signin.php

 if($stmt->num_rows>0) { $_SESSION['username'] = $_POST['username']; echo ''; error_reporting(E_ALL); 

signin_action.php

 < ?php require('../../config/init.php'); $_SESSION['username'] = $_GET['username']; if ($_SESSION['username']) { echo '