Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia!!
Então, eu tenho um mecanismo de login, onde o nome da sessão é gerado aleatoriamente, possui vários métodos pra validar o login antes disso, mas o nome é gerado assim:
$s_code = uniqid(rand(), true);
session_name($s_code);
session_start();
E nas páginas que devam ser protegidas, eu inicio uma função para verificar o login, no caso o método é esse:
<?php
//Verifica se o login foi efetuado, deve ser chamado em todas as paginas
public function verif_if_is_logged() {
//Nomeia a sessão
$s_code = $_SESSION['sName'];
session_name($s_code);
//Inicia a sessão
session_start();
//Verifica se o ID do usuário ja foi definido
if (!isset($_SESSION['userID'])) {
//se não foi, destroi a sessão
session_destroy();
return 0;
} else {
//Se foi devolve true para o view
return 1;
}
}
Mas isso gera uma mensagem de alerta, mas só em alguns lugares:
>
Citar
Notice: A session had already been started - ignoring session_start() in /var/www/easy/model/class.loginModel.php on line 11
A dúvida é como contornar isso ??
Ou, se eu retirar o session_start() do método que verifica se o ID do usuário foi definido na sessão, ele vai continuar verificando em todas as vezes ? pergunto isso porque as vezes a página não recebe os dados da sessão se não iniciar o session_start() na página.
Desde ja obrigado
@Guilherme Luiz Esse método é iniciado em todas as páginas, tendo em vista que é tudo fechado, mas acho que eu expliquei mal o problema, eu deixo o error_reporting(0) ativado, ele esconde o erro, isso que você disse que já tinha entendido.
O que eu não to conseguindo entender, é porque em determinadas páginas, o php simplesmente não recebe os dados da sessão se não declarar ela no inicio de novo, tanto que em algumas página ele não notifica essa erro mesmo iniciando a sessão de novo.
Mas eu devo ter feito alguma coisa que esconde o erro, e não to achando o que poderia ser isso.
[RESOLVIDO]
Em alguns lugares estava sobrando o session_start, e estava gerando outra sessão em cima com outro nome aleatório, só que como em todas as paginas, o interactor do js, chamava o caller, isso depois de já ter iniciado outra sessão, e no caller possuía o validador da sessão correta, ele retornava pra sessão anterior dentro do método que estava sendo executado, por isso só dava erro em algumas páginas/métodos, e o:
>
Citar
session_regenerate_id();
tava comentado .-. kk
Vlw @Guilherme Luiz !
Você deve iniciar session antes de qualquer processamento de dados html.
O ideal é você colocar essa função no topo da pagina antes de qualquer saida html, caso contrario isso sempre acontecerá!
O que você pode fazer é colocar um @ antes do session_start() mas ao fazer isso, você apenas estará ocultando o "erro" e não tratando ele da forma correta.
Além disso eu lhe pergunto:
Se a sessão já foi iniciada em outra pagina, porque você quer indicar novamente o inicio dela?
Esse NOTICE que você recebe diz exatamente isso... o seu session_start() neste ponto do código está sendo ignorado porque já houve o inicio da sessão em outro momento do seu código