0

I have strange problem. I created a site with login/register/profile functions, but the problem is when i go to my profile for example it says

Hello, John Doe.

Then i logout and login with different account(for example lets say the name is Mark Smith), and then when i go to profile.php it still says

Hello, John Doe untill i reload the page (F5) than it changes to

Hello, Mark Smith.

What is the problem, in my logout file i destroy every session.. Code:

<!DOCTYPE html>
<html>
<head>
    <title>MyProject: Profile Page</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    <style>

    /* css here so i don't have to create specific file only for bg. */

    body 
    {
        background: url(images/index-body.jpg) no-repeat center center fixed;
        position: absolute;
        top: 0;
        left: 0;
        min-height: 100%;
        min-width: 100%;
        background-size: cover;
    }

    </style>
</head>
<body>

<nav class="navbar navbar-inverse navbar-fixed-top">

    <div class="container-fluid">

        <div class="navbar-header">

            <a class="navbar-brand" href="welcome.php">MyProject: Welcome</a>

        </div>

        <ul class="nav navbar-nav navbar-right">

            <li><a href="welcome.php"><span class="glyphicon glyphicon-home"></span> Home</a></li>
        <li><a href="profile.php"><span class="glyphicon glyphicon-user"></span> My Account</a></li>
        <li><a href="logout.php"><span class="glyphicon glyphicon-log-out"></span> Logout</a></li>

    </ul>

    <form class="navbar-form navbar-right" action="search.php">

        <div class="form-group">

            <input type="text" class="form-control" placeholder="Search by keyword" name="search_prototype">

        </div>

    </form>

  </div>

</nav>

<br><br><br><br><br>

<div class="container">

    <div class="jumbotron">

    <?php
    session_start();
    ob_start();

    require 'db.php';

    if(!isset($_SESSION['logged_in']))
    {
      header("location: index.php");
      exit();
    }

    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        if(isset($_POST['update_submit']))
        {
            if(!empty($_POST['update_name']) && !empty($_POST['update_lastname']) && !empty($_POST['update_email']) && !empty($_POST['update_aboutme']))
            {
                $first_name = $mysqli->escape_string($_POST['update_name']);
                $last_name = $mysqli->escape_string($_POST['update_lastname']);
                $old_mail = $mysqli->escape_string($_SESSION['email']);
                $email = $mysqli->escape_string($_POST['update_email']);
                $about_me = $mysqli->escape_string($_POST['update_aboutme']);

                $mysqli->query("UPDATE users SET name='$first_name', lastname='$last_name', email='$email', aboutme='$about_me' WHERE email ='$old_mail'");

                $_SESSION['suc_message'] = "Your account has been updated!";

                header("location: profile.php");
                exit();
            }
            else
            {
                $_SESSION['error_message'] = "You can't leave anything blank!";

                header("location: profile.php");
                exit();
            }
        }
    }

    $email = $mysqli->escape_string($_SESSION['email']);

    $result = $mysqli->query("SELECT * FROM users WHERE email='$email'");

    if($result->num_rows > 0)
    {

    $row = $result->fetch_assoc();



      echo '

      <div class="media-left">

          <img src="images/avatar_Test.png" class="media-object" style="width:110px">

      </div>

      <div class="media-body">

          <h2 class="media-heading">', $row['name'], ' ', $row['lastname'], '</h3>
          <small>Last active: ', $row['lastlogin'], '</small><br>
          <small>Register date: ', $row['register_date'], '</small>

     </div>

      <br><button data-toggle="collapse" class="btn btn-info" data-target="#profile_about">About me</button> 
      <button data-toggle="collapse" class="btn btn-info" data-target="#profile_contact">Contact</button> 

      <div id="profile_about" class="collapse"><br>', $row['aboutme'], '</div>

      <div id="profile_contact" class="collapse">

          <small><br>Email address: ', $row['email'], '</small><br>  

      </div>

      <br><br>

      <div class="alert alert-success">

        <span class="glyphicon glyphicon-edit"></span>  You can edit your profile data by changing the informations below

      </div>

      ';

      if(isset($_SESSION['error_message']) AND !empty($_SESSION['error_message']))
      {

          echo '

          <div class="alert alert-warning alert-dismissible" id="myAlert">

              <a href="#" class="close">&times;</a>
              <strong>Error!</strong> ' . $_SESSION["error_message"] . '

          </div>

          ';

          unset($_SESSION['error_message']);
      }

      if (isset($_SESSION['suc_message']) AND !empty($_SESSION['suc_message']))
      {

          echo '

          <div class="alert alert-warning alert-dismissible" id="myAlert">

              <a href="#" class="close">&times;</a>
              <strong>Success!</strong> ' . $_SESSION["suc_message"] . '

          </div>

          ';

          unset($_SESSION['suc_message']);
      }

      echo '

      <form method="POST">

        <input type="text" id="ex2" class="form-control" value="', $row['name'], '" aria-describedby="sizing-addon1" name="update_name"><br>
        <input type="text" id="ex2" class="form-control" value="', $row['lastname'], '" aria-describedby="sizing-addon1" name="update_lastname"><br>
        <input type="email" id="ex2" class="form-control" value="', $row['email'], '" aria-describedby="sizing-addon1" name="update_email"><br>
        <textarea class="form-control" rows="5" name="update_aboutme" id="comment" placeholder="', $row['aboutme'], '"></textarea>

        <br><br><input type="submit" name="update_submit" class="btn btn-info" value="Save"> <button data-toggle="collapse" class="btn btn-info" data-target="#profile_change_password">Change password</button> 

      </form>

      <div id="profile_change_password" class="collapse">

        <form method="POST">

          <input type="password" id="ex2" class="form-control" aria-describedby="sizing-addon1" name="update_name"><br>
          <input type="password" id="ex2" class="form-control" aria-describedby="sizing-addon1" name="update_lastname"><br>

          <br><br><input type="submit" name="update_submit" class="btn btn-info" value="Save">

        </form>          

      </div>


      ';
    }
?>

</div>

    <p>Website created by Cadilab.</p> 

</div>

<script>
$(document).ready(function()
{
    $(".close").click(function()
    {
        $("#myAlert").alert("close");
    });
});

</script>
Nathaniel
  • 51
  • 7
  • Possible duplicate of [How to control web page caching, across all browsers?](http://stackoverflow.com/questions/49547/how-to-control-web-page-caching-across-all-browsers) – imtheman Mar 12 '17 at 23:12
  • Why do you start the output buffering manually? If it is not active, the start of the session would not work. This is extrem bad coding style. Never output html and start the session after it. – Shutterfly Mar 12 '17 at 23:16
  • Whoa I don't know how i missed that, in my other files it's on the beggining. Seems this fixed the problem, thanks. Do you think there is anything else that I should look after, or change ? – Nathaniel Mar 12 '17 at 23:20

1 Answers1

0

I would use a different method to login and logout. First though Session and Cookies 2 different ways.

//first our session we need to check if its started and if not then start it
if(session_id()=="") session_start();

//under a login page
echo "<form action=\"login.php\" method=\"post\">";
echo "<input type=\"text\" name=\"email\" />";
echo "<input type=\"password\" name=\"password\" />";
echo "<input type=\"submit\" id=\"login_sm\" name=\"submit\" value=\"".ucwords('login')."\" />";
echo "</form>";

//under login.php or w/e you decide to use
if(empty($_SERVER['HTTP_REFERER'])) $_SERVER['HTTP_REFERER']="home.php"; // this allows us to check once logged in send back to home or user pager or w/e
foreach($_POST as $key=>$value) $_POST[$key]=htmlentities($value,ENT_QUOTES);
if(isset($_POST['email']) && isset($_POST['password'])) 
{
    $email = $_POST['email'];
    $password = md5($_POST['password']); // try to learn other than md5
    $sql="SELECT * FROM database WHERE email=\"".$email."\" AND md5(password)=\"".$password."\""; //yes md5 is not a good method so choose your encryption here
    $query=mysql_query($sql);
    if(mysql_num_rows($query)==0) {
        header("Location: ".$_SERVER["HTTP_REFERER"]."?login=Failed");
        }
    else {
        $row = mysql_fetch_array($query);
        $_SESSION['user_id-'.$_SERVER['SERVER_NAME']]=mysql_result($query,0); //this would have a unique identifier For Example The User ID would identify them as each user.
        setcookie("email-".str_replace(".","_",$_SERVER['SERVER_NAME']),$email,time()+60*60*24*365,"/",$_SERVER['SERVER_NAME'],0);
        setcookie("password-".str_replace(".","_",$_SERVER['SERVER_NAME']),$password,time()+60*60*24*365,"/",$_SERVER['SERVER_NAME'],0); // I use cookies in this case so if the browser is closed you can check for cookies and they will be logged in auto if you wish this is not needed.
       header("Location: ".$_SERVER["HTTP_REFERER"]."?login=Success");
       }

//logout
if(empty($_SERVER['HTTP_REFERER'])) $_SERVER['HTTP_REFERER']="index.php";
    unset($_SESSION['user_id-'.$_SERVER['SERVER_NAME']]);
    setcookie("email-".str_replace(".","_",$_SERVER['SERVER_NAME']),"dummytext",time()-60*60*24*365,"/",$_SERVER['SERVER_NAME'],0);
    setcookie("password-".str_replace(".","_",$_SERVER['SERVER_NAME']),"dummytext",time()-60*60*24*365,"/",$_SERVER['SERVER_NAME'],0);
//again you dont have to use cookies but i do.
    header("Location: ".$_SERVER["HTTP_REFERER"]."?logout=Success");

using header(); Helps with the session change to the correct login because its a refresh basicly.