Проблемы с php скриптом входа в систему - передача объектов через сессию - PullRequest
0 голосов
/ 26 августа 2011

У меня есть страница index.php, которая создает новый класс Login (класс login выполняет всю обработку данных, создает сеанс, перенаправляет и т. Д.)

index.php Я создаю новый класс Login

  require_once('login.class.php');  
  $login = new Login;

Конструктор входа выглядит следующим образом

public function __construct(){
    // Start session and open a database connection 
    session_start();
    $this->connectToDB();
}

, если пользователь успешно входит в систему, я перенаправляю его на securePage.php.

, если я выполняю следующие действия на securePage.php

$test = $_SESSION ['usrData'];
var_export($test->getFirstName());
var_export($test->getLastName());
var_export($test->isAuthorized());

отображает следующую ошибку

Неустранимая ошибка: вызов функции-члена getFirstName () для необъекта в /login/securePage.php в строке17

Когда, однако, я ставлю

$login = new Login;

перед

var_export($test->getFirstName());
var_export($test->getLastName());
var_export($test->isAuthorized());

Это работает!Я не знаю, что дает, и если я делаю что-то не так, потому что даже когда я ставлю

session_start();

вместо

$login = new Login;

, но это все равно дает мне ошибку

Неустранимая ошибка: вызов функции-члена getFirstName () для необъекта в /login/securePage.php в строке 16

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Может быть пара вещей:

-Вы должны выполнить session_start () в верхней части любой страницы, которая использует сеансы.

-С сериализованным объектом (объектом, хранящимся в переменной сеанса), класс объекта должен быть включен везде, где на него ссылаются.

Скорее всего, вы не использовали session_start ()?

Кроме того, переменные ресурса (дескрипторы базы данных, дескрипторы файлов и т. Д.) Не выдержат сериализации / десериализации, которая происходит с переменными сеанса.

0 голосов
/ 26 августа 2011

Я думаю, что это связано с именем переменной. Если я не ошибаюсь, в вашем securePage.php вот код:

$login = $_SESSION ['usrData'];
var_export($login);
var_export($test->getFirstName());

Должно быть:

$login = $_SESSION ['usrData'];
var_export($login);
var_export($login->getFirstName());

Надеюсь, это поможет.

0 голосов
/ 26 августа 2011

Хорошей практикой будет закрытие сеанса перед отправкой перенаправления (хотя я ожидаю, что маловероятно, что сеанс не будет записываться до тех пор, пока браузер не запросит новую страницу).

Что означает строка 'var_export ($ login);' внутри securePage.php генерировать? (закомментируйте вызовы, которые вызывают фатальную ошибку).

...