Ir para conteúdo

POWERED BY:

Arquivado

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

Levi de Moraes Cardoso

Sessão deixaram de funcionar.

Recommended Posts

Bom dia senhores.

 

Meu site tem um sistema de login que utiliza variáveis $_SESSION conforme descrito nos trechos abaixo.  O grande problema é que este sistema de login estava funcionando há quase um ano e ontem do nada, parou de funcionar. Fiz verificações e concluí que a sessão é criada apenas na página onde os dados são criados, mas não é propagada nas outras páginas, é como se ela deixasse de existir. Ou seja, ao tentar fazer o login, o usuário é redirecionado de volta para a página de login. O provedor informou que não houve mudanças nos diretórios. Então a grande pergunta é: o que pode estar causando este problema nas SEESSIONS se não houveram alterações nem no código-fonte e nem no diretório de hospedagem? Substituir variáveis de sessions por variáveis vindas de um banco de dados é algo válido e seguro? 

 

PÁGINA QUE RECEBE E ANALISA OS DADOS INSERIDOS NO FORM DO LOGIN:

 

Citar

$user = $_POST['user'];
$pass = $_POST['pass'];


$symbol = '$$btx#@ssk';
$senha_final = md5($pass.$user.$symbol);

 

$verifica = mysql_query ("SELECT * FROM USUARIOS WHERE EMAIL = '$user' AND SENHA = '$senha_final' ");
$dado = mysql_fetch_object($verifica);
if ($dado->FUNC == AsOp)
{$nivel = 3; }
elseif ($dado->FUNC == OpEs)
{$nivel = 2; }
elseif ($dado->FUNC == CoOp)
{$nivel = 4; }
elseif ($dado->FUNC == GeOp)
{$nivel = 4; }
if ($dado->FUNC == DiEx)
{$nivel = 4; }
if ($dado->FUNC == TeCa)
{$nivel = 0; }

$linhas = mysql_num_rows ($verifica);
if ($dado->STATUS == 'Ativo')
{
if ($linhas > 0)
{session_start();
ob_start();
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
$_SESSION['nivel'] = $nivel;
$_SESSION['filial'] = $dado->BASE;
$_SESSION['who'] = $dado->NOME;
$logado = $_SESSION['user'];
$action_query = mysql_query("UPDATE USUARIOS SET ONOFF ='Online' WHERE EMAIL='$logado'");
header('location:index.php');
}
}
elseif ($dado->STATUS == 'Bloqueado')
{
unset ($_SESSION['user']);
unset ($_SESSION['pass']);
unset ($_SESSION['nivel']);
unset ($_SESSION['filial']);
unset ($_SESSION['who']);
header('location:login1.php?warning=LoginLock');
}
else
{
unset ($_SESSION['user']);
unset ($_SESSION['pass']);
unset ($_SESSION['nivel']);
unset ($_SESSION['filial']);
unset ($_SESSION['who']);
header('location:login1.php?warning=LoginFail');
}

 

TRECHO DO COLOCADO NAS PÁGINAS PROTEGIDAS 

 

Citar

 session_start();

if((!isset ($_SESSION['user']) == true) and (!isset ($_SESSION['pass']) == true)) 
{session_destroy();
unset($_SESSION['user']); 
unset($_SESSION['pass']); 
header('location:login1.php?warning=SessionFail'); }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeramente uma dica, use o recurso de código escolhendo a linguagem certa nesse caso o php pra postar codigo ao inves de citar e por favor faça indentação no codigo pra facilitar leitura. segundamente acho que esse == true no !isset é desnecessário. tu pode usar só isset ou !isset de acordo o que precisa. e não entendi o porque do unsset. por que tá dando unset se quer que a seção fique ativa?

Compartilhar este post


Link para o post
Compartilhar em outros sites
38 minutos atrás, marsolim disse:

primeramente uma dica, use o recurso de código escolhendo a linguagem certa nesse caso o php pra postar codigo ao inves de citar e por favor faça indentação no codigo pra facilitar leitura. segundamente acho que esse == true no !isset é desnecessário. tu pode usar só isset ou !isset de acordo o que precisa. e não entendi o porque do unsset. por que tá dando unset se quer que a seção fique ativa?

Bom dia e obrigado pela resposta.

 

Não havia me atentado que existe a opção de "code" para mostrar os trechos de código, por isso usei o "cite".

 

Quanto ao !isset a ideia é que se estivesse vazio, a sessão seria destruída e redirecionado ao login. E funcionava normalmente.

 

Mas agora, pelos testes que fiz, a sessão é criada, porém quando chega no próxima página, as variáveis de sessão não existem, mesmo sem o UNSET.

 

Fiz o seguinte teste:

 

PÁGINA DE ANÁLISE: login_analise.php

$user = $_POST['user'];
$pass = $_POST['pass'];
$symbol = '*_*#$@!77';
$senha_final = md5($pass.$user.$symbol);

$verifica = mysql_query ("SELECT * FROM USUARIOS WHERE EMAIL = '$user' AND SENHA = '$senha_final' ");
$dado = mysql_fetch_object($verifica);

$linhas = mysql_num_rows ($verifica);
if ($dado->STATUS == 'Ativo')
{
if ($linhas > 0)
{session_start();
ob_start();
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
$_SESSION['nivel'] = $nivel;
$_SESSION['filial'] = $dado->BASE;
$_SESSION['who'] = $dado->NOME;
$logado = $_SESSION['user'];
$action_query = mysql_query("UPDATE USUARIOS SET ONOFF ='Online' WHERE EMAIL='$logado'");
header('location:index_teste.php');
}

PÁGINA PROTEGIDA QUE RECEBERIA A SESSÃO: index_teste.php

if((isset ($_SESSION['user'])) and (isset ($_SESSION['pass']))) 
{echo 'Sessão OK';}
else
{ echo 'Sessão não existe';}

O resultado no navegador é: "Sessão não existe". Ou seja, as variáveis não estão passando de uma página para outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e assim?

if(isset($_SESSION['user']) && isset($_SESSION['pass'])){
    echo 'Sessão OK';
}else{
    echo 'Sessão não existe';
}

 

o operador and no php é && e o or é || e acho que basta testar uma seção e eu aliás crio só uma seção com uma array de dados tipo

 

$_SESSION['logado'] = array($user, $pass, $nivel);

 

e quando precisar uso por exemplo

 

echo 'Bem vindo ', $logado[0];

 

aí tu pode testar só a seção logado

if(isset($_SESSION['logado'])){
    echo 'Sessão OK';
}else{
    echo 'Sessão não existe';
}

a e bota o session_start() no início da página logo depois dos headers se tiver headers, se não tiver bota na primeira linha

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 violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

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