与OOP的问题设置会话

时间:2011-06-02 15:51:44

标签: php oop session

在我尝试上班的程序中,我无法弄清楚为什么我必须两次登录才能设置会话。我导航到不同页面的方式如下

<?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新手并尝试学习OOP并可以使用帮助。 感谢

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 个答案:

答案 0 :(得分:1)

使用OOP不会改变会话的工作方式。

以你想要的任何方式采取这种方式:你的示例代码非常混乱。如果我抓住我的一位同事写这样的代码,我会给他们一个星期来改善自己或让他们被解雇。您很可能只是在某处发生了错误,但可能不在您提供的代码示例中。如果有的话,我会建议你采用更强大的编程风格。

无论如何,我也遇到了类似的问题,这可能会对你有所帮助:

  • 确保您始终只调用session_start()一次(即它应该在整个应用程序中的一个位置)。

  • 确保在检查之前设置SESSION值。

  • 摘要与会话有关。不要自己检查SESSION变量,编写一个为您完成的变量。例如:$user->setGalleryAdmin(true)$user->isGalleryAdmin()