'Redirect Loop happen when the session is not set
"Session.php"
if(!isset($_SESSION['username']))
{
header('Location: ./index.php'); // Redirecting To Home Page per il login
exit;
}
session_start();// Start new session or resume existing session
//echo 'session_id: '.session_id();
require "connessione.php";
$connessione = connessionedb("db");
$username=$_SESSION['username'];
$username = $connessione->real_escape_string($username);
$query = "SELECT * FROM utenti where idUtente= '$username' ";
$risultato = mysqli_query($connessione, $query);
$num_record = mysqli_num_rows ($risultato);
if ($num_record!=1)
{
header('Location: ./index.php'); // Redirecting To Home Page per il login
$con->close();
exit;
}
I want it to send me back to the home when there isn't a session, but it will make a redirect loop.
Solution 1:[1]
Don't do this check when you're already on index.php
.
if($_SERVER['PHP_SELF'] != '/index.php' && !isset($_SESSION['username']))
{
header('Location: ./index.php'); // Redirecting To Home Page per il login
exit;
}
Solution 2:[2]
Use different session check at the index file like
if(isset($_SESSION['username'])){
header('Location: ./dashboard.php'); // Redirecting To Dasboard Page Already logged in
exit;
}
Solution 3:[3]
Your $_SESSION variable is not created until session_start(); is called. Since you have session_start() after you are evaluating $_SESSION['username'], it will always come back as not set because $_SESSION itself is not set yet.
Also, as Barmar pointed out, if you are requiring session.php in your index.php file, and you havent started a session yet, then it will always cause a loop. So since you are already inside index.php, just exit out. Dont redirect.
Here is the code modification:
session_start();// Start new session or resume existing session
if(!isset($_SESSION['username']))
{
exit;
}
//echo 'session_id: '.session_id();
require "connessione.php";
$connessione = connessionedb("db");
$username=$_SESSION['username'];
$username = $connessione->real_escape_string($username);
$query = "SELECT * FROM utenti where idUtente= '$username' ";
$risultato = mysqli_query($connessione, $query);
$num_record = mysqli_num_rows ($risultato);
if ($num_record!=1)
{
header('Location: ./index.php'); // Redirecting To Home Page per il login
$con->close();
exit;
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Barmar |
Solution 2 | |
Solution 3 |