LINUX.ORG.RU

Сессии в PHP + include


0

0

Почему не вижу переменную сессии при инклуде в другой файл

*
session_start();
$id_user='test';
session_register("id_user");
include("file.php");
*



file.php:
*
session_start();
echo $id_user;
*

напишите пожалуйста что я не так делаю?


>напишите пожалуйста что я не так делаю?

походу много, но сперва почитай

http://ua2.php.net/session_register

прочитай первое "Предостережение"

AcidumIrae ★★★★★
()

Разобрался
закрутил все через $_SESSION['id_user']

ujen
() автор топика
Ответ на: комментарий от barbuza

Ты пишешь либу которая в частности использует сессии.
а)Ты проверяешь стартанута ли сессия и если нет стартуешь ее
б)Не занимаешся фигней, ставишь собаку и стартуешь сессию всегда.

Простой вариант с собакой, требуется удалить файл. Но
а)Файла может не быть, кто-то успел его удалить в этот момент
б)У тебя нет туда прав, в этот момент
Получишь нотис. А поставь собаку и наслаждайся.

roller ★★★
()
Ответ на: комментарий от roller

> наслаждайся

поиском ошибок, которые криворукий писатель не удосужился обработать в силу своей умственной неполноценности.

Teak ★★★★★
()
Ответ на: комментарий от Teak

Повторить ЕЩЕ раз?
if (is_file($filename) && is_writable($file))
  unlink($file);

НЕВЕРНАЯ конструкция, т.к. в моменту между условием и действием есть некий момент времени когда файл может быть удален. И если ты не поставишь собаку(или не подавишь error_reporting) то получишь тут СООБЩЕНИЕ в браузере, если это веб приложение. Это недостаток ПХП, но что есть с тем и живем.

Предложи другой вариант удаления файла, без подавления вывода ошибок.

roller ★★★
()
Ответ на: комментарий от roller

А что у пхп быдлокодеров модно плевать сообщениями об ошибках в браузер на продакшн сервере? Впрочем, модно раз большинство сайтов так делают. Узнайте что ли про display_errors = Off.

anonymous
()
Ответ на: комментарий от anonymous

Умный, да?

Перечитай еще раз задачу с удалением файла. И скажи нах тебе в логе эта ошибка?

А собачка и есть ВРЕМЕННОЕ ОТКЛЮЧЕНИЕ error_reporting.

roller ★★★
()
Ответ на: комментарий от roller

@ - отключение вывода всех ошибок от выражения. Далее читаем, что Teak вам написал про криворуких писателей. Любая ошибка должна быть обработана, ну или хотя бы запротоколирована. Ее наличие в логах, говорит, что в вашей системе что-то не так. set_error_handler никто не отменял, если в логах ее видеть не хочется. А в крайнем случае error_reporting = E_ALL & ~E_NOTICE тоже есть. Еще раз - каждая ошибка должна быть обработана.

anonymous
()
Ответ на: комментарий от anonymous

Кому она должна?

Для чего мне информация об ошибке в приведенном примере? Реакция на нее возможно какая то и нужна, но информация в логе - нет.

roller ★★★
()
Ответ на: комментарий от roller

ЗЫ: а если реакция на ошибку вида "а пох, игнор и работаем дальше" то вот простая собачка об этом и говорит

roller ★★★
()
Ответ на: комментарий от roller

> Для чего мне информация об ошибке в приведенном примере? Реакция на нее возможно какая то и нужна, но информация в логе - нет.

Хороший поход. Грамотный. :) И правда, нафиг нам логировать ошибки? Мы лучше покажем ее невинному юзеру и напишем кучу громких типо "Пожалуйста, сообщите об ошибки администартору сайта"

А наличие этой ошибки в логах будет одназначно говорить о том, что механизм пора пересматривать :)

boombick ★★★★★
()
Ответ на: комментарий от boombick

>И правда, нафиг нам логировать ошибки?

Читаем ВНИМАТЕЛЬНО: Для чего мне информация об ошибке в ПРИВЕДЕННОМ примере?

roller ★★★
()
Ответ на: комментарий от roller

>> б)Не занимаешся фигней, ставишь собаку и стартуешь сессию всегда.
"Брутфорсный" подход, идеологически неверный. Лучше использовать всегда проверки, а не в лоб выполнять функции, тогда логика кода будет чище, использование собак -- чаще всего признак лени.

Про удаление файла -- как вариант, конечно можно использовать конструкцию

if( is_file( $filename ) && is_writeable( $filename ) && unlink( $filename ) ) {
custom_report_func( '...success report' );

} else {
custom_report_func( '...error report' );
}

При столь _маловероятном_ случае, что другой пользователь удалит файл именно в долю секунды между проверкой 2-го и третьего условия, логирование такой ошибки никому не помешает, а на продакшн хостинге, как правильно сказали, в начале главного скрипта всегда ставится ini_set( 'display_errors', 0 );

Вопрос не в том, что работает и в вашем варианте, а в идеологии.

manro
()
Ответ на: комментарий от manro

А при чем тут идеология? Я просто говорю что собачка имеет полное право на существование.

Лично я ее использую только для операций с файлами. Но думаю что есть и другие ОПРАВДАННЫЕ применения, просто я лично с ними еще не сталкивался.

roller ★★★
()

А зачем стартовать уже запущеную сессию? Убери session_start(); из второго файла.. Или под иф. чтонидь типа: if (! isset("$id_user")) session_start();

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.