неулавливаю логику IF

alexblade

Новичок
файл1 - стартует сессия и вызывает файл2
файл2 - echo должно сработать только если стартанула сессия в файле1 т.е. если есть session_id()

такой код в файле2
$c = session_id();
var_dump(!empty ($c));
даёт тру если сессия стартанула и фалс если нет. более того даже такая конструкция верно срабатывает
if (session_id()) echo'AA'; else echo'bb';
if (!empty ($c)) echo'AA'; else echo'bb'; // и такая

однако если вместо есho поставить
if (!empty ($c)) {require_once$_SERVER['DOCUMENT_ROOT'].'/code/сode.php';}
ошибка , НО при этом такой if
if (1==1) {require_once$_SERVER['DOCUMENT_ROOT'].'/code/code.php';}
срабатывает верно

в чем ошибка у этой конструкции
if (!empty ($c)) {require_once$_SERVER['DOCUMENT_ROOT'].'/code/сode.php';}
???

ЗЫ: или это только у меня ошибка?
 

DIG

Новичок
Партнер клуба
Ох и каша...
Для начала.
Как файл1 стартует сессию? Как он "вызывает" файл2 ? Инклудит?

Вообще нужно читать это и это.
 

alexblade

Новичок
file1
session_start();

<img src="/file2.php">
---------------------end

file2
$c = session_id();
if (!empty ($c)) require_once$_SERVER['DOCUMENT_ROOT'].'/code/code.php';
--------------------end

code.php это картинка. выше обозначенный код не работает. вы скажите проблема в code.php. хорошо тогда я просто заменяю !empty ($c) на 1==1 и картинка рисуется.

if (1==1) require_once$_SERVER['DOCUMENT_ROOT'].'/code/сode.php';
т.е. как бэ уже проблемма не в code.php а наверно в IF , мы же просто поменяли !empty ($c) на 1==1

как у вас данная конструкция срабатывает?
 

DIG

Новичок
Партнер клуба
вызывает через иклюд
Как это я угадал...

Значит я почитаю за вас.
Сессии используют стандартные, хорошо известные способы передачи данных. Собственно, других-то просто и нет.
Идентификатор - это обычная переменная. По умолчанию ее имя - PHPSESSID.
Задача PHP отправить ее браузеру, чтобы тот вернул ее со следующим запросом. Из уже упоминавшегося раздела FAQ ясно, что переменную можно передать только двумя способами: в куках или POST/GET запросом.
Ну так вот, наводящий вопрос. У вас в какой момент между этими двумя файлами (файл1 и файл2) проскакивает POST/GET или куки?
 

alexblade

Новичок
DIG
у меня session.use_cookies = 1
session.use_trans_sid = 0

предыдущий пост исправил чтоббыло понятнее что у меня там.
 

alexblade

Новичок
DIG
спасибо. вроде разобрался... правда по другому заработало.... еще покавыряюсь и отпишусь если что.
 

alexblade

Новичок
с передачей через ГЕТ/ПОСТ вроде понятно.

но вот ни как не получается прикрутить пример для кукисов

у меня стоит session.use_only_cookies=1

далее пример из ФАКА c применением if (isset($_REQUEST[session_name()])) session_start();

file1.php
session_start();
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Вы обновили эту страницу ".$_SESSION['counter']++." раз. ";
echo "<br><a href='file2.php'>обновить</a>";

file2.php
if (isset($_REQUEST[session_name()])) session_start();
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Вы обновили эту страницу ".$_SESSION['counter']++." раз. ";
echo "<br><a href='file1.php'>обновить</a>";

воторой файл не подхватывает сессию. если же во втором просто написать session_start(); то подхватывает.
как сделать что сработал механизм if (isset($_REQUEST[session_name()])) session_start();
?
 

Breeze

goshogun
Команда форума
Партнер клуба
ты забыл про session_id(); который надо ставить после приема

типа того

PHP:
$session_name = session_name();
if (isset($_REQUEST[$session_name])) {
session_id($_REQUEST[$session_name]);
}
session_start();
 

alexblade

Новичок
Breeze
Только Session start() должно быть внутри фигурных скобок я так понимаю... Для этого мы и вставляем if. Спасибо дома проверю.
 

Breeze

goshogun
Команда форума
Партнер клуба
Тебе это зачем вообще?
Раз такой гемор, значит что-то ты неправильно хочешь сделать
 

alexblade

Новичок
Breeze
не работает ваш код
file2.php
$session_name = session_name();
if (isset($_REQUEST[$session_name])) {
session_id($_REQUEST[$session_name]); session_start();
}
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Вы обновили эту страницу ".$_SESSION['counter']++." раз. ";
echo "<br><a href='file1.php'>обновить</a>";


а мне это тоже самое как для описанно в факе
Если же приходится показывать одну и ту же страницу как авторизованным, так и не авторизованным пользователям, то тут поможет такой трюк – стартовать сессию только тем, кто ввел пароль, или тем, у кого уже стартовала сессия.
Для этого в начало каждой страницы вместо просто session_start() пишем
if (isset($_REQUEST[session_name()])) session_start();
таким образом, Мы стартуем сессию только тем, кто прислал идентификатор.
 

Breeze

goshogun
Команда форума
Партнер клуба
используй _COOKIE вместо _REQUEST
 

alexblade

Новичок
да с кукисом работает. а почему реквест не вытягивает кукисы как по мануалу должен ?

плюс самое главное - даже если в первом файле сесия не запущена, во втором всеравно срабатывает тк кукисы еще есть на компе.
получается для моеё задачи нужна сесия только через ГЕТ блин...
 

alexblade

Новичок
да точно request_order = "GP" спасибо
но изза того что, когда сессия уже не запущена второй файл всеравно видит куки придется играться через ГЕТ
 

Breeze

goshogun
Команда форума
Партнер клуба
ты так и не ответил для чего так.
то, что в факе -- не показатель.
 

alexblade

Новичок
У меня файл один если через сессию то одно показывает если напрямую зайти к нему ( без сессии) то другое показывает

Один файл для разных целей
 
Сверху