Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite a todos.
Estou com um problema aqui em um projeto que não consigo entender.
Ocorre que as sessões são criadas, mas não podem ser obtidas na próxima página.
É um sistema de login. No login, após a verificação de usuário e senha, eu faço o seguinte:
<?
session_start(); // no início do arquivo
// ...
$_SESSION['login'] = $login;
$_SESSION['senha'] = $senha;
echo '<script> location.href="index.php"; </script>';
?>
E, na página index.php, tenho um include na primeira linha para um arquivo que faz:
<?
session_start();
include("../inc/config.php");
$login = $_SESSION['login'];
$senha = $_SESSION['senha'];
$qry = mysql_query("SELECT * FROM admin WHERE login='$login' AND senha='$senha'"); echo '<script> location.href="login.php"; </script>';
exit;
}
if($_SESSION['login']=='' OR $_SESSION['senha']=='') {
echo '<script> location.href="login.php"; </script>';
exit;
}
?>
Mas ocorre que, mesmo com login correto, a página redireciona para index.php e esta, por sua vez, redireciona de volta para login.php.
Fiz uns testes com die() e vi que as sessões são realmente criadas no login.php, mas no index.php, elas ficam nulas.
Alguém tem ideia do que possa ser?
É só o login do admincp de um projeto para amanhã. Só falta isso... :(
Agradeço desde já.
Fiz mais uns testes e vi que as sessões não estavam setadas no index.php. :ermm:
Cara, valeu.
Mas qual foi o erro? Usar redirecionamento em JS ao invés de header() ou gravar as sessões de uma variável, e não diretamente do formulário?
>
Cara, valeu.
Mas qual foi o erro? Usar redirecionamento em JS ao invés de header() ou gravar as sessões de uma variável, e não diretamente do formulário?
O teu erro foi que a variavel estava em branco, então você deve declarar a variavel
$login = $_POST['login'];
e entao salvar a session
$_SESSION['login'] = $login;
OU
Salvar a session usando o post diretamente
$_SESSION['login'] = $_POST['login'];
Tenta assim:
<?php
session_start(); // no início do arquivo
// ...
$_SESSION['login'] = $login;
$_SESSION['senha'] = $senha;
session_commit(); //Fecha a sessão para a escrita antes do redirecionamento
echo '<script> location.href="index.php"; </script>';
?>O teu erro foi que a variavel estava em branco, então você deve declarar a variavel
Muito estranho... Eu declarei as variáveis antes da gravação das sessões. Só tinha esquecido de colar aqui no tópico. Mistérios do PHP :wacko:
$login = mysql_real_escape_string($_POST['login']);
$senha = md5($_POST['senha']);
Tenta assim: (...)
Interessante. Eu realmente não conhecida a função session_commit(), mas é vivendo e aprendendo, né? :lol:
Termina a sessão atual e guarda os dados.
Os dados de sessão sã geralmente guardados depois que o script termina sem a necessidade de chamar session_write_close()' date=' mas como dados de sessão são trancados para evitar escritas concorrentes, apenas um script pode operar em uma sessão de cada vez. Quando usando framesets junto com sessões você irá experimentar os frames sendo lidos um a um devido a esta trava. Você pode reduzir o tempo necessário para ler todos os frames terminando a sessão tão logo todas as mudanças das variáveis de sessão estejam feitas.[/quote']
Algo misterioso estava nulando minhas sessões no fim da execução do script (pude perceber isso com testes com a função die()), e esta função não permitiria isso. Valeu!
Mas continuo sem entender porque as sessões eram nuladas se viessem de uma variável. Será que é porque ele teria que buscar o valor da variável cada vez que eu tentava buscar pelo valor da sessão? Vai saber...
Mas tudo bem, obrigado a todos. :lock:
Isso é um bug do PHP. Às vezes os cabeçalhos de sessão não são enviados com o redirecionamento. Mas eu só tinha observado esse problema com redirecinamento a partir de
header('Locatioion: pagina.html');
Não achei que teria problema também com o redirecionamento javascript, mas parece que resolve também...
Como eu disse, mistérios do PHP... :wacko: kkk
Eu já estava pensando em gravar o login em um banco de dados com o IP do cara. Ia dar muito trabalho e muito problema né? kkk
Não ia dar certo não... ter que ficar acessando banco de dados toda vez pra isso ia causar um overhead danado.
Na pagina de login tem que colocar:
<?php
session_start(); // no início do arquivo
// ...