Проблема установки сеанса с ООП - PullRequest
0 голосов
/ 02 июня 2011

В программе, которую я пытаюсь заставить работать, я не могу понять, почему я должен войти в систему дважды, чтобы установить сеанс. Я перехожу на разные страницы следующим образом

<?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);
           } ?>

и у меня есть страница для входа пользователя в систему с помощью следующего класса, который возвращает session_var на страницу с именем adminlogin.php. Класс User делает то, что должен, но по какой-то причине я должен войти в систему дважды. Я использовал тот же код, но без классов, и он отлично работает. Новичок в php и пытается изучить ООП и может использовать помощь. Спасибо

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";
}
   }
  ?>

1 Ответ

1 голос
/ 02 июня 2011

Использование ООП не меняет способ работы сессий.

Примите это так, как вам нравится: ваш пример кода очень грязный.Если бы я поймал одного из моих коллег, пишущего такой код, я бы дал им неделю, чтобы улучшить себя или уволить.Скорее всего, вы где-то допустили ошибку, но, вероятно, ее нет в предоставленных вами примерах кода.Во всяком случае, я бы посоветовал вам принять более надежный стиль программирования.

В любом случае, я сталкивался с подобными проблемами, и это может помочь вам:

  • Убедитесь, что вы звоните session_start(), всегда и только один раз (т. Е. Он должен быть в одном месте во всем приложении).

  • Убедитесь, что вы устанавливаетеSESSION значение перед проверкой.

  • Абстрагируйте все, что связано с сессиями.Не проверяйте SESSION переменные самостоятельно, напишите класс, который сделает это за вас.Как: $user->setGalleryAdmin(true) и $user->isGalleryAdmin()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...