0

In the program I am trying to get to work I can not figure out why I have to login in twice to set the session. The way i am navigating to different pages is as follows

<?php
           if (!isset($_REQUEST['content']))
           {
               if (isset($_SESSION['gallery_admin']))
                  include("edit.inc.php");
               else
                  include("adminlogin.php");
           }
           else
           {
               $content = $_REQUEST['content'];
               $nextpage = $content . ".inc.php";
               include($nextpage);
           } ?>

and I have a page for user to login in with a class as follows which returns the session_var to a page called adminlogin.php. The User class does what it should but I have to login twice for some reason. I used the same code but with out classes and it works fine. New to php and trying to learn OOP and could use help. Thanks

public function CheckUser ($username, $hashedpassword)
{
    $query = "select count(*) from user where username = ? and password = ?";
    $dbConnection = $this->connection;
    $stmt = mysqli_prepare($dbConnection,$query);
    mysqli_stmt_bind_param($stmt, 'ss', $username, $hashedpassword);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt,$userCount);
    mysqli_fetch($stmt); 
    if ($userCount > 0)
     {
        //$_SESSION['gallery_admin'] = $username;
        //$user = $this->username;
        //$this->session_var = $_SESSION['gallery_admin'];
        $this->session_var = $username;
        return $this->session_var;
        //include ("adminmain.inc.php");
        //header("Location: admin.php");
      }
     else {
         return "in the else";
     }
}

adminlogin.php

<?php
   if (isset($_POST['submit'])) { 

   $username = trim($_POST['username']);
   $password = trim($_POST['password']);
   $hashedpassword = md5($password);

   $instanceOfUserClass = new User();
   $found_user = $instanceOfUserClass->checkUser($username, $hashedpassword);
//$instanceOfUserClass->checkUser($username, $hashedpassword);
//echo $instanceOfUserClass->session_var;

if ($found_user ) {
    //$user = $instanceOfUserClass->session_var;
    $_SESSION['gallery_admin'] = $found_user;
    include ("edit.inc.php");
    //header("Location: admin.php");

} else {
    //echo "No User";
}
   }
  ?>
2
  • please use curly brackets to format your code Commented Jun 2, 2011 at 15:55
  • not sure what you mean about curly brackets? Commented Jun 2, 2011 at 16:05

1 Answer 1

1

Using OOP doesn't change the way sessions work.

Take this any way you'd like: your sample code is very messy. If I caught one of my colleagues writing code like this I would give them a week to improve themselves or have them fired. You very likely just made an error somewhere but it's probably not in the code samples you provided. If anything, I would advise you to adopt a more robust programming style.

In any case, I've ran across similar issues as well and this might help you:

  • Make sure you're calling session_start(), always and only once (ie. it should be in one place in your whole application).

  • Make sure you're setting the SESSION value before you check it.

  • Abstract away anything to do with sessions. Don't check the SESSION variables yourself, write a class that does it for you. Like: $user->setGalleryAdmin(true) and $user->isGalleryAdmin()

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.