Session variable does not exist

0

A few days ago I reported a problem that was happening in the code I was using, but since I needed a lot of things, I decided to use another one. In the new code, there are the variables to save the session, as below:

if (mysql_num_rows($query) != 1) {
  // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
  echo "Login inválido!"; exit;
} else {
  // Salva os dados encontrados na variável $resultado
  $resultado = mysql_fetch_assoc($query);

  // Se a sessão não existir, inicia uma
  if (!isset($_SESSION)) session_start();

  // Salva os dados encontrados na sessão
  $_SESSION['UsuarioID'] = $resultado['id'];
  $_SESSION['UsuarioNome'] = $resultado['nome'];
  $_SESSION['UsuarioNivel'] = $resultado['nivel'];

  // Redireciona o visitante
  header("Location: restrito.php"); exit;
}

As for the restriction page code, there are the following codes:

if (mysql_num_rows($query) != 1) {
  // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
  echo "Login inválido!"; exit;
 } else {
  // Salva os dados encontrados na variável $resultado
  $resultado = mysql_fetch_assoc($query);

  // Se a sessão não existir, inicia uma
  if (!isset($_SESSION)) session_start();

  // Salva os dados encontrados na sessão
  $_SESSION['UsuarioID'] = $resultado['id'];
  $_SESSION['UsuarioNome'] = $resultado['nome'];
  $_SESSION['UsuarioNivel'] = $resultado['nivel'];

  // Redireciona o visitante
  header("Location: restrito.php"); exit;
}

But when I enter the user and password as they ask in the test page that I made to run the codes, the following message appears:

  

Notice: Undefined index: UserName in C: \ Program Files (x86) \ EasyPHP-DevServer-14.1VC9 \ data \ localweb \ system \ restrict.php on line 28

I tried to change "UserID", "UserName" and "User Level" to the name of the attributes of the table (id, name and level respectively) but I'm redirected to index and nothing happens.     

asked by anonymous 19.09.2018 / 02:10

3 answers

1

Are you logged in? You need to log in to every page you need to record or retrieve something from the session.

session_start()

Reference: link

    
19.09.2018 / 02:52
1

$_SESSION is a superglobal then, theoretically, it will always be defined . It does not make sense to use isset in it because it would always return true .

Then your if :

if (!isset($_SESSION)) session_start();

will always return false and the session will never be started.

The resolution would be only session_start without itself:

session_start();

Because the documentation says:

  

session_start () creates a session or summarizes the current session based on a session id passed via GET or POST, or passed via cookie.

    
19.09.2018 / 14:57
0
if (!isset($_SESSION)) {
    session_start();
    $_SESSION['UsuarioID'] = $resultado['id'];
    ...
}

Try using your if in this way

    
19.09.2018 / 14:47