Ir para conteúdo

POWERED BY:

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 violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
×

Informação importante

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