2014-11-24 5 views
0

EDIT: просто хотел добавить, что не имеет exit(); Как указано zerkms и user1578653 делает этот код бесполезным и, вероятно, опасным, его не следует использовать.php - Проверить сеанс странным beahviour

Im пишут небольшие cms и проверяем, зарегистрирован ли пользователь в сеансах корыта. Каждая страница в моей BackOffice имеет:

require('includes/security.php'); 

со следующим кодом

<?php 

    session_start(); 

    session_regenerate_id(); 

    if (!isset($_SESSION["user_logged"]) or !isset($_SESSION["ip"])) 
    {  
     session_destroy(); 
     unset($_SESSION['user_logged']); 
     unset($_SESSION['ip']); 
     unset ($_SESSION); 
     header("location: index.php"); 
    } 

    if ($_SESSION["ip"] != $_SERVER['REMOTE_ADDR']) 

    { 
     session_destroy(); 
     unset($_SESSION['user_logged']); 
     unset($_SESSION['ip']); 
     unset ($_SESSION); 
     header("location: index.php"); 
    } 

    if ($_SESSION["user_logged"] != "yes") 

    { 
     session_destroy(); 
     unset($_SESSION['user_logged']); 
     unset($_SESSION['ip']); 
     unset ($_SESSION); 
     header("location: index.php"); 
    } 

?> 

Если я пытаюсь Асесс любой страницы непосредственно работает как задумано и перенаправляет меня на index.php для одной страницы, за исключением ,

Эта страница просто берет данные из POST и обновляет/удаляет изображения/данные в базе данных.

Единственная разница, о которой я могу думать, заключается в том, что на этой странице нет html и ее в той же папке, что и все остальные.

Но когда я пытаюсь получить доступ к нему напрямую, а перенаправляет меня это trows:

Notice: Undefined variable: _SESSION 
Warning: session_destroy() [<a href='function.session-destroy'>function.session-destroy</a>]: Trying to destroy uninitialized session 

Эта страница начинается так же, как это:

<?php 

require('includes/security.php'); 

// Engine - Update and Delete Images 

Что может быть причиной этого?

+0

Нет других ошибок/предупреждений, особенно те, относящиеся к 'session_start' (заголовки уже отправлены или такие как)? – CBroe

+1

'session_regenerate_id()' каждый запуск? Эмм ... почему? Вы также хотите поставить 'exit'' сразу после перенаправления. – zerkms

+0

Нет, это первые два, которые появляются, а затем повторяются на следующем _Session и, что еще более странно, он также дает уведомление: Неопределенный индекс: из всех POST-варов на этой странице. – Marvin

ответ

1

Ваш код, скорее всего, пытается уничтожить сеанс несколько раз (один раз в каждом «если»). Вы также делаете одно и то же в каждом «если» - попробуйте изменить код в security.php на:

<?php 

    session_start(); 

    session_regenerate_id(); 

    if(
     !isset($_SESSION["user_logged"]) || 
     !isset($_SESSION["ip"]) || 
     $_SESSION["ip"] != $_SERVER['REMOTE_ADDR'] || 
     $_SESSION["user_logged"] != "yes" 
    ) {  
     session_destroy(); 
     unset($_SESSION['user_logged']); 
     unset($_SESSION['ip']); 
     unset ($_SESSION); 
     header("location: index.php"); 
     exit(); 
    } 
?> 
+0

Хотя я понимаю это, почему уникальное поведение с одной страницей? Также с условностями он только попытался бы уничтожить его один раз. Спасибо. – Marvin

+0

Ну, ошибка исчезла, теперь я только ошибки, связанные с неопределенными vars на этой странице. Я чувствую, что эта страница повреждена. – Marvin

+0

Я немного изменил свой ответ - я добавил вызов «exit» после функции «header». Я считаю, что проблемы вы столкнулись, потому что сценарий продолжает выполняться после вызова «заголовка». – user1578653

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