将实例化放在index.php上,在header.php上没有

时间:2014-01-20 08:58:20

标签: php

我在标头中有一个登录脚本,它实例化一个新的Session,它将设置一个会话cookie。由于某种原因,脚本在实例化($session->login($found_user)处停止工作。 $ found_user返回包含所有数据(包括id)的User对象。

登录的会话类方法:

public function login($user) {
   if($user) {
      $this->user_id = $_SESSION['user_id'] = $user->id;
      $this->_logged_in = true;
   }
} 

如果我将header.php代码复制到我的index.php中,它确实有效。

我初始化会话类,它在index.php调用头之前发生:

defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'includes');

require_once(LIB_PATH.DS.'class.Session.php');

是否存在路径问题?

我找到用户的静态方法确实有效..那么为什么一种方法有效,而另一种方法无效。

找到用户对象的代码:

$found_user = User::authenticate($email, $password);
    if($found_user) {
       $session->login($found_user);
       redirect_to("index.php");
    }

$ found_user返回User对象,当我回显$ found_user-> id时,我得到了id。

收到以下错误: 注意:未定义的变量:第41行的* / header.php中的会话致命错误:在第41行的* / header.php中的非对象上调用成员函数login()

使用更多代码进行编辑 我的课程类:

class Session {

    // Attributes
    private $_logged_in = false;
    public  $user_id;

    // Constructor
    function __construct() {
        session_set_cookie_params(24*60*60);
        session_start();
        $this->check_message();
        $this->check_login();
    }

    // Validation
    public function is_logged_in() {
        return $this->_logged_in;
    }

    private function check_login() {
        if(isset($_SESSION['user_id'])) {
            $this->user_id = $_SESSION['user_id'];
            $this->_logged_in = true;
        } else {
            unset($this->user_id);
            $this->_logged_in = false;
        }
    }

    // Login - Logout
    public function login($user) {
        if($user) {
            $this->user_id = $_SESSION['user_id'] = $user->id;
            $this->_logged_in = true;
        }
    }

    public function logout() { ...
    } 
}

$session = new Session();

找到用户并将其传递到登录方法的代码:

$found_user = User::authenticate($email, $password);
if($found_user) {
   $session->login($found_user);
   redirect_to("index.php");
}

$ found_user返回User对象,$found_user->id给出$found_user的id:

用户对象([id] => 3)和该行的更多数据。

解: 发现了问题。不得不把全球$ session;在调用类方法之前。

1 个答案:

答案 0 :(得分:0)

发现问题。不得不把全球$ session;在调用类方法之前。