2010-01-06 2 views
2

У меня есть одна чертова проблема, которую я не могу понять для жизни меня. Я создал супер простой CMS для клиента. Каждая другая страница CMS имеет и включает файл, называемый session.php.PHP Sessions Issue

session_start(); 
$username = $_SESSION['siteadmin']; 
if (!$_SESSION['siteadmin']){ 
    header('Location: login.php?status=2'); 
} 

Время от времени случайные вещи исчезают из базы данных. Итак, я настраиваю грубую систему регистрации, которая регистрировала любое действие через CMS. Ну, это случилось снова. Журналы показывают это:

Logged in       **.**.237.209 17:18 <-- thats me 
Deleted board member id 12 195.42.102.25 16:49 
Deleted board member id 15 195.42.102.25 16:49 
Deleted board member id 8 195.42.102.25 16:49 
Deleted board member id 10 195.42.102.25 16:49 
Deleted board member id 9 195.42.102.25 16:49 
Deleted board member id 4 195.42.102.25 16:49 
Deleted board member id 3 195.42.102.25 16:49 
Deleted board member id 5 195.42.102.25 16:49 
Deleted board member id 6 195.42.102.25 16:49 
Deleted board member id 11 195.42.102.25 16:49 
Deleted board member id 7 195.42.102.25 16:49 
Deleted review id 2    195.42.102.25 16:49 
Deleted review id 3    195.42.102.25 16:49 

и что происходит на пару страниц. Он даже не показывает регистрацию в 195.42.102.25! Последний раз это случилось с 195.128.18.19. Как компьютеры загружают окно без переменной сеанса? В моем коде есть дыра в безопасности, которую я полностью игнорирую ?!

Любое понимание этой проблемы было бы удивительным.

Спасибо,

+0

Что находится в файле "session.php"? – Arno

ответ

8

Положите exit после header.

+0

Благодарим вас за быстрый и прямой ответ. Кажется, сработало! – ssergei

+0

Добро пожаловать. Как говорит BenoKrapo, у вас может возникнуть другая проблема с вашим приложением. Вы должны * никогда * не удалять (или иным образом обновлять) данные по запросу GET. Для этого всегда используйте POST. – troelskn

0

Рассмотрите возможность добавления session_regenerate_id() после сеанса_старта. Это предотвратит кражу cookie сеанса (PHPSESSID в вашем файле cookie будет восстановлен на каждом pageload, если вы используете указанную выше функцию), что, вероятно, происходит (за исключением проблемы exit).

3

Действительно, положите выход или штамп - это заголовок.

Очень легко не следить за перенаправлением заголовка и получать то, что выполняется по умолчанию.

В этом вопросе есть что-то интересное: The Daily WTF (и более подробно) по этой проблеме, которую я пока не могу найти.

Редактировать: Найдена! :) http://thedailywtf.com/Articles/WellIntentioned-Destruction.aspx

+0

Спасибо за статью, она описала мою точную ситуацию! – ssergei