2012-01-01 2 views
0

Я пытаюсь создать ссылку для выхода из системы, которая включена в авторизованную область.Почему этот PHP не работает?

Уставной область выглядит следующим образом:

<?php require_once '../../includes/initialize.php'; 
if(!$Session->is_logged_in()) { redirect_to('login.php'); } 

$user = $User->find_by_id($Session->user_id); 

?> 


<!-------------- START OF LOGOUT LINK --------------> 


<?php 
if (isset($_GET['logout'])) 
{ 
    $Session->logout($user); 
    $Logger->logout($user); 
    redirect_to('login.php'); 
} 
?> 

<p style="float: right;"><a href="?logout=true">Logout</a></p> 


<!-------------- END OF LOGOUT LINK --------------> 


<p>Welcome <?php echo $user->first_name; ?>, you are now logged into the admin area.</p> 

Приведенный выше код работает просто отлично!

Но когда я меняю его так, чтобы выход из системы был включен, я получаю сообщение об ошибке. Это то, что я положил в моем включаемый файл под названием logoutlink.php:

<?php 
if (isset($_GET['logout'])) 
{ 
    $Session->logout($user); 
    $Logger->logout($user); 
    redirect_to('login.php'); 
} 
?> 

<p style="float: right;"><a href="?logout=true">Logout</a></p> 

я тогда включить его в мою уполномоченную область как таковые:

<?php require_once '../../includes/initialize.php'; 
if(!$Session->is_logged_in()) { redirect_to('login.php'); } 

$user = $User->find_by_id($Session->user_id); 

?> 


<!-------------- START OF LOGOUT LINK --------------> 


<?php include '../../includes/logoutlink.php'; ?> 


<!-------------- END OF LOGOUT LINK --------------> 


<p>Welcome <?php echo $user->first_name; ?>, you are now logged into the admin area.</p> 

я получаю следующие ошибки:

Примечание: Undefined переменной: Session ...

&

Фатальная ошибка: Вызов функции логаута члена() на не-объект в ...

Может кто-то объяснить, что я не хватает? Заранее спасибо за вашу помощь.

+0

В каких строках вы получаете ошибки? –

+0

Он жалуется на $ Session-> logout ($ user); но, как я уже говорил, если я не использую include, он работает нормально. – Nathan

ответ

1

Попробуйте установить global $Session; в верхней части вы logoutlink.php файла.

+0

Это сделало трюк! Не могли бы вы освежить мой вопрос о том, почему $ Session считалось локальным для этого файла include? – Nathan

+0

Мое образованное предположение, '$ Session' было создано в' initialize.php', которое «включено». Я думаю, что переменные не могут начинаться во включенном файле, охватывать через родительский файл, а затем в другой включенный файл. Я предполагаю, что если вы включите 'global $ Session'' в родительский файл, он также должен работать. Подробнее о области переменных PHP: http://php.net/manual/en/language.variables.scope.php –

+0

Отлично! Это очень помогает. Спасибо. Я сопоставляю включенный файл logoutlink.php с функцией, где все внутри нее локально. Будет ли это справедливым способом думать? – Nathan

1

Я заметил, что вы используете $ Session, а не $ _Session.

Если $ Session является переменной, определенной пользователем в initialize.php, то попробуйте положить

require_once '../../includes/initialize.php'; 

в вашем logoutlink.php

+0

Да, $ Session - это определенный пользователем объект. Я попробовал ваше предложение, и это не сработало. – Nathan

Смежные вопросы