Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nathanfeitoza

Como adicionar um "mantenha-me conectado" em PHP

Recommended Posts

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");
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.