Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, galera.
Bom, desenvolvi um script de login com session() aqui, tá tudo rodando direitinho, mas eu quero adicionar um "mantenha-me conectado" onde usuário clica e o navegador guarda sua sessão e mesmo que o feche ele loga automaticamente. Consegui implementar a checkbox e setcokie(), mas só que mesmo com ela marcado depois de fechado o navegador ele não abre a página restrita. Então eu queria que você me ajudassem a solucionar este problema, abaixo está o código.
<?php
include('config.php');
if(!empty($_POST) AND empty($_POST["login"]) OR empty($_POST["senha"])) {
echo"Você deve preencher os campos de login e senha";
} else{
$login = $_POST["login"];
$senha = $_POST["senha"];
$senha_codificada = md5($senha);
$sql = "SELECT * FROM `usuarios` WHERE (email_usuario = '". $login ."') AND (senha_usuario = '". md5($senha) ."') LIMIT 1";
$query = mysql_query($sql);
if (mysql_num_rows($query) != 1){
echo"login inválido";
}
else{
$resultado = mysql_fetch_assoc($query);
if (!isset($_SESSION)) session_start();
// Salva os dados encontrados na sessão
$_SESSION['usuario_id'] = $resultado['id'];
$_SESSION['nome_usuario'] = $resultado['nome_usuario'];
$_SESSION['sobrenome_usuario'] = $resultado['sobrenome_usuario'];
$_SESSION['email_usuario'] = $resultado['email_usuario'];
$_SESSION['cpf_usuario'] = $resultado['cpf_usuario'];
$_SESSION['telefone_usuario'] = $resultado['telefone_usuario'];
$_SESSION['senha_usuario'] = $resultado['senha_usuario'];
// Redireciona o visitante
if(isset($_POST['lembrar'])) {
$lifetime=600;
session_set_cookie_params($lifetime);
$currentCookieParams = session_get_cookie_params();
setcookie($_SESSION['email_usuario'] , $_SESSION['senha_usuario'], time(60*60*24*100)+$lifetime);
}
header("Location: logado.php");
}
}
?>Amigo, eu não costumo usar Sessions, uso sempre um cookie em PHP. Insiro um código gerado aleatoriamente, ativo a restrição para enviar somente por SSL e defino o domínio que usará o cookie.
Se você fizer assim, basta na página que processa o login, verificar se a checkbox "Mantenha-me conectado" está marcada. Se estiver, define a duração do cookie infinita, ou com um prazo que você achar bom.
Caso não esteja marcado, defina para o cookie existir enquanto durar a sessão de navegação (padrão)
Olá ESerra e Claudio Junior, eu entendi qual é a lógica de vocês, mas é minha primeira vez que tento trabalhar com cookies e não estou acostumado a eles, vocês poderiam me dar exemplos de como eu faria o que vocês disseram?
cria uma variavel logada onde o valor é igual a 1 e coloca ela na pagina indez
if($varialvel = 1){
location("restrita.php");
}
ai se não tiver esta variavel então vai continuar na pagina tenho esse codigo pronto qualquer coisa só chamar
Não sei se vai te ajudar mas eu tenho um código pronto...
<?php
session_start();
include("sistema/config.php");
include("sistema/funcoes.php");
$sql = select("SELECT * FROM user");
if(isset($_SESSION['usuario']) && !empty($_SESSION['usuario'])){
redir(URLBASE . "/users/");
}
$lembrar = (isset($_COOKIE['lembrar']) && $_COOKIE['lembrar'] != '' ? $_COOKIE['lembrar'] : false);
$arr = explode('/', $lembrar);
$login = base64_decode($arr[0]);
$senha = base64_decode($arr[1]);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
<link rel="stylesheet" type="text/css" href="css/topo.css" />
<link rel="stylesheet" type="text/css" href="css/conteudo.css" />
</head>
<body>
<div id="topo">
<div id="logo_index">
Logo
</div>
<div id="entrada">
<form name="entrar" method="post" action="" >
<input class="inputs" type="text" name="login" placeholder="E-Mail..."/>
<input class="inputs" type="password" name="senha" placeholder="Senha..." />
<input class="bottom" type="submit" name="logar" value="Entrar" /><br>
<input type="checkbox" name="lembrar" /><label>Mantenha-me conectado!</label>
<?php
if($_POST['logar']){
$input['email'] = limpaTexto($_POST['login']);
$input['senha'] = limpaTexto($_POST['senha']);
$input['lembrar'] = $_POST['lembrar'];
if(empty($input['email'])){ //verifica de está vazio o campo nome
echo "Informe Seu E-Mail"; //Escreve mensagem na tela
}elseif(empty($input['senha'])){ //verifica se o campo senha está vazio
echo "Informe sua senha"; //Escreve mensagem na tela
}else{ //Se o campo email e senha não estiver vazio ele executara este código
$getEmail = select("SELECT * FROM user WHERE email='". $input['email'] ."'"); //seleciona o email digitedo
$conta = mysql_num_rows($getEmail); //COnta o numero de linhas do banco de dados
if($conta <= 0){ //Verifica se o email está ou não cadastrado
echo "Esse E-Mail não foi cadastrado..."; //Escreve a mensagem na tela caso o email não exista
}else{ //Executa o bloco de código seguinte se existir o email selecionado
$getSenha = select("SELECT * FROM user WHERE senha='". $input['senha'] ."'"); //Seleciona a senh no banco
$conta = mysql_num_rows($getSenha); //Conta o numero de colunas no banco de dados
if($conta <= 0){ //Verifica de não existe a senha
echo "Senha incorreta..."; //Se não existir a senha mostra a mensagem
}else{ //email e senha tudo Ok, executa o próximo bloco de cmandos
$_SESSION['usuario']['login'] = base64_encode($input['Email']);
$_SESSION['usuario']['senha'] = base64_encode($input['Senha']);
if($input['Lembrar'] == true){
setcookie('lembrar', base64_encode($input['Email'])."/".base64_encode($input['Senha']), time() + 60 * 60 * 24 * 30, '/');
}else{
setcookie('lembrar', '', time() - 60 * 60 * 24 * 30, '/');
}
if(isset($_SESSION['usuario']) && !empty($_SESSION['usuario'])){
redir(URLBASE."/users/");
}else{
redir(URLBASE);
}
}
}
}
}
?>
</form>
</div>
</div>
<div id="conteudo">
<div id="lateral">
<div id="esquerda">
Esquerda
<div id="img">
Imagens
</div>
</div>
<div id="direita">
<div id="form">
<div id="label">
<label>Cadastre-se</label>
</div>
<form method="post" action="" >
<input class="nome_cadas" type="text" name="nome" placeholder="Nome" />
<input class="sobre_cadas" type="text" name="sobre" placeholder="Sobrenome" /><br>
<input class="inputs_cadas" type="text" name="email" placeholder="E-Mail" /><br>
<input class="inputs_cadas" type="text" name="confEmail" placeholder="Confirme seu E-Mail" /><br>
<input class="inputs_cadas" type="password" name="senha" placeholder="Senha" /><br>
<input class="inputs_cadas" type="password" name="confSenha" placeholder="Confirme a Senha" /><br>
<input class="data_cadas" type="date" name="nasc" /><br>
<input class="radio_cadas" type="radio" name="sexo" value="masculino" /><label>Masculino</label>
<input class="radio_cadas" type="radio" name="sexo" value="feminino" /><label>Feminino</label><br>
<input class="botao_cadas" type="submit" name="enviar" value="cadastrar" />
</form>
<?php
if($_POST['enviar']){
if(!isset($_POST['nome']) || $_POST['nome'] == ''){
echo "Preencha o campo Nome";
}elseif(!isset($_POST['sobre']) || $_POST['sobre'] == ''){
echo "Preencha o campo Sobrenome";
}elseif(!isset($_POST['email']) || $_POST['email'] == ''){
echo "Preencha o campo E-Mail";
}elseif(!preg_match("/^[a-z0-9_\.\-]+@[a-z0-9_\.\-]*[a-z0-9_\-]+\.[a-z]{2,4}$/i", $_POST['email'])){
echo "O E-Mail não é válido";
}elseif(!isset($_POST['confEmail']) || $_POST['confEmail'] == ''){
echo "Preencha o campo E-Mail";
}elseif(!isset($_POST['senha']) || $_POST['senha'] == ''){
echo "Preencha o campo senha ";
}elseif(!isset($_POST['confSenha']) || $_POST['confSenha'] == ''){
echo "Preencha o campo confirmar senha";
}elseif($_POST['nasc'] == ''){
echo "Informe sua data de nascimento";
}elseif(!isset($_POST['sexo']) || $_POST['sexo'] == ''){
echo "Selecione seu sexo";
}elseif($_POST['email'] != $_POST['confEmail']){
echo "Os E-Mails não são iguais";
}elseif($_POST['senha'] != $_POST['confSenha']){
echo "As Senhas não são iguais";
}else{
$nome = limpaTexto($_POST['nome']);
$sobre = limpaTexto($_POST['sobre']);
$email = $_POST['email'];
$senha = $_POST['senha'];
$data = $_POST['nasc'];
$sexo = $_POST['sexo'];
$tipo = "user";
$compEmail = select("SELECT * FROM user WHERE email='$email'");
$conta = mysql_num_rows($compEmail);
if($conta > 1){
echo 'Esse email já foi cadastrado, tente outro!';
}else{
$dados = array(
'nome' => $nome,
'sobre' => $sobre,
'email' => $email,
'senha' => $senha,
'data' => $nasc,
'sexo' => $sexo,
'tipo' => $tipo
);
$insert = insert("user", $dados);
echo "Você foi cadastrado com sucesso";
mkdir("/user/users/$nome");
redir(URLBASE."/users/");
@mysql_free_result($banco);
@mysql_close($conn);
}
}
}
?>
</div>
</div>
</div>
</div>
</body>
</html>Olá, fernandodefaria.
Eu tentei implementar seu código no meu, mas não resolveu continua não salvando os cookies. Analise os códigos abaixo, logar e logado.php, e me diga, por obséquio, onde está o erro.
<?php
// logar.php
include('config.php');
if(!empty($_POST) AND empty($_POST["login"]) OR empty($_POST["senha"])) {
echo"Você deve preencher os campos de login e senha";
} else{
$login = $_POST["login"];
$senha = $_POST["senha"];
$custo = '08';
$salt = 'Cf1f11ePArKlBJomM0F6aJ';
$senha_criptografada = crypt($senha, '$2a$' . $custo . '$' . $salt . '$');
$sql = "SELECT * FROM `usuarios` WHERE (login_usuario = '". $login ."') AND (senha_usuario = '". $senha_criptografada ."') LIMIT 1";
$query = mysql_query($sql);
if (mysql_num_rows($query) != 1){
echo"login inválido";
}
else{
$resultado = mysql_fetch_assoc($query);
$input['lembrar'] = $_POST['lembrar'];
if (!isset($_SESSION)) session_start();
// Salva os dados encontrados na sessão
$_SESSION['usuario_id'] = $resultado['id'];
$_SESSION['nome_usuario'] = $resultado['nome_usuario'];
$_SESSION['sobrenome_usuario'] = $resultado['sobrenome_usuario'];
$_SESSION['email_usuario'] = $resultado['email_usuario'];
$_SESSION['cpf_usuario'] = $resultado['cpf_usuario'];
$_SESSION['telefone_usuario'] = $resultado['telefone_usuario'];
$_SESSION['senha_usuario'] = $resultado['senha_usuario'];
$_SESSION['login_usuario'] = $resultado['login_usuario'];
$_SESSION['nivel_usuario'] = $resultado['nivel'];
$_SESSION['ativado'] = $resultado['ativo'];
// Redireciona o visitante
$input['login'] = $_SESSION['login_usuario'];
$input['senha'] = $_SESSION['senha_usuario'];
if($input['lembrar'] == true){
setcookie('lembrar', base64_encode($input['login'])."/".base64_encode($input['senha']), time() + 60 * 60 * 24 * 30, '/');
}else{
setcookie('lembrar', '', time() - 60 * 60 * 24 * 30, '/');
}
header("Location: logado.php");
}
}
?>
<?php
// logado.php
require_once('class.login.php');
$nivel_necessario = 1 OR 2;
// Verifica se não há a variável da sessão que identifica o usuário
if (!isset($_SESSION['usuario_id']) OR ($_SESSION['nivel_usuario'] < $nivel_necessario)) {
// Destrói a sessão por segurança
session_destroy();
// Redireciona o visitante de volta pro login
echo"Está página é só para administradores <a href='login.php'>Sair</a>";
exit;
} if (!isset($_SESSION['usuario_id']) OR ($_SESSION['ativado'] < 1)) {
echo"Sua conta ainda não foi ativada";
exit;
}
if((isset($_COOKIE['lembrar']) && $_COOKIE['lembrar'] != '' ? $_COOKIE['lembrar'] : false)){
$lembrar = $_COOKIE['lembrar'];
$arr = explode('/', $lembrar);
$input['login'] = base64_decode($arr[0]);
$input['senha'] = base64_decode($arr[1]);
}
?>
<h1>Página restrita</h1>
Olá, <?php echo $_SESSION['nome_usuario']; ?>!
<a href="sair.php">Sair</a>
O navegador não vai restaurar a sessão sozinho, você terá que verificar se o cookie existe e é válido e então recriar a sessão.