someone
someone

Reputation: 149

Not sure if using isset correctly

I am building up a website that must not show login option when the user is already logged in, i.e. session is active. I have tried working with this but its not returning the desired output. Please help. Thanks.

<?php
    if(!isset($_SESSION)) {echo "<li><a href='Employee.php'>Login</a></li>";}
                ?>

edit: I am adding the part where I check login details from database and start session.

 $query = "SELECT Cust_FName from customer where Cust_ID='$name' and  Password='$pass'";


$result = mysqli_query($con, $query);
if(mysqli_num_rows($result)!= false)
{
$row = mysqli_fetch_row($result);
echo row[0];
if(mysqli_num_rows($result) > 0)
{

echo "Logged in!";
session_start();
$_SESSION['userName'] = $row[0];
header("Location: index.php");


}


}

Upvotes: 1

Views: 433

Answers (3)

Rajdeep Paul
Rajdeep Paul

Reputation: 16963

Problem

From your comment:

The login button should only show up when the user has not logged in, and once he does, it should disappear.

Solution

// This would be your login.php page
<?php
    session_start();

    // process your HTML form, like this
    if(isset($_POST['login'])){
        // Remember: always validate your form inputs
        $name = $_POST['name'];
        $pass = $_POST['pass'];

        $query = "SELECT Cust_FName from customer where Cust_ID='$name' and  Password='$pass'";
        $result = mysqli_query($con, $query);
        if(mysqli_num_rows($result)!= false){
            $row = mysqli_fetch_row($result);
            //echo row[0];
            if(mysqli_num_rows($result) > 0){
                //echo "Logged in!";
                $_SESSION['userName'] = $row[0];
                header("Location: index.php");
                exit(); // exit() is necessary, otherwise the script execution is not terminated. Setting header alone is not enough to redirect.
            }
        }

    }

    if(isset($_SESSION['userName'])){
        // user is already logged in
        // redirect the user to a different page
        // header("Location: index.php");
        // exit();
    }else{
        // user is not logged in
        // display login option

        ?>

        <!--Your HTML form for login-->
        <form action="login.php" method="POST">
            <input type="text" name="name" value="" /><br />
            <input type="text" name="pass" value="" /><br />
            <input type="submit" name="login" value="Login" />
        </form>

        <?php
    }
?>

Edited:

Session is a file that resides in our server and in that file we can store any amount of information. We generally deploy a session cookie on the client's browser.

Before we output any HTML or white space, we need to start our session.

When we do like this,

<?php
    session_start();
?> 

It will say, go to the browser, get the session id and open the appropriate file and if it didn't find any session id, it will start a new session. User can only see session id, nothing else.

Tip: Remember to clean up sessions from time to time.

Upvotes: 0

Luca Giardina
Luca Giardina

Reputation: 518

Put in the login page

<?php
session_start();
// Store Session Data
$_SESSION['login_user']= $username;  // Initializing Session
?>

when you have to check use

<?php
session_start();
// Store Session Data
if(isset($_SESSION['login_user'])){
    //do things
}
?>

and on logout

<?php
session_destroy();
?>

Upvotes: 0

mario.van.zadel
mario.van.zadel

Reputation: 2949

If you want to check if the session is started, you can use

if(session_status() != PHP_SESSION_ACTIVE) {
    echo "<li><a href='Employee.php'>Login</a></li>";
}

The problem is that the session als also there if the user isn't logged in. You have to check if e.g. $_SESSION['user_id'] is set:

if(!isset($_SESSION['user_id']) {
    echo "<li><a href='Employee.php'>Login</a></li>";
}

In my example $_SESSION['user_id'] will be filled when the user login was successful.

Upvotes: 2

Related Questions