Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Область действия сессий

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Проблема с работой сессии при использовании include и require
apelido
Отправлено: 18 Января, 2008 - 14:41:51
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




Ситуация следующая.
Действие сессии при переходе по ссылкам - все как по учебникам, переменные видны, все отлично работает.
Проблема возникает когда используются include - сессия не действительна для скриптов, включенных таким образом. На примере одного скрипта(*): в него передаются параметры зарегестрированного пользователя для подключения к базе данных. Тут все в порядке. Но в него включается еще один скрипт с помощью include и там тоже нужны эти параметры, так вот там их я получить не могу. Потестив, я заметил, что этой включенной части даже SID не достается, то есть восстановить сессию ему просто не на чем.
Кстати, попробовав организовать такую же систему с помощью cookie те же проблемы. Не видит скрипт их там.
При этом вот таких (*) скриптов несколько, они объединяются с помощью меню, между ними параметры сессии передаются вроде нормально, а вот с include везде проблемы..
 
 Top
valenok Модератор
Отправлено: 18 Января, 2008 - 16:25:20
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Что делает инклуд -
При интерпретации просто берёт инкудируемый файл и вставляет как есть в то место где вызывается инклуд.
Делает отже самое что копи пэйст кода.

В вашем случае phpfaq.ru/all#debug

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if(!isset($_SESSION['a'])) $_SESSION['a'] = '123';
  4.  
  5. include('ses_test.php');
  6.  


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP echo $_SESSION['a']; ?>
  3.  


-----
Truly yours, Sasha.
 
My status
 Top
apelido
Отправлено: 18 Января, 2008 - 19:17:59
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




увы и ах.
кстати, разве include вставляет текст вызываемого скрипта в исходный? по-моему этим require занимается, а include вставляет результат выполнения вызываемого.
В любом случае, ситуация несколько другая, попробую пояснить.
Если представленные вами скрипты пронумеровать, то в 1 скрипте уже используется зарегестрированная в предыдущем скрипте переменная (как бы в нулевом). Так вот - первый скрипт нормально обрабатывает переменную, а вот 2 ее не видит.
Фактически это выглядит так:
скрипт выводит результат запроса (для подключения к БД используется как раз зарегистрированная в нулевом скрипте переменная в качестве идентификатора пользователя) и включает скрипты редактирования записей (отдельная формочка которая появляется в том же окне рядом с таблицей), который так же использует эту переменную.
// mysql_connect("localhost", $_SESSION['valid_user'])
Так вот: запрос-то обрабатывается (то есть он использует эту переменную!), а вот формочка увы, так как ее содержимое тоже формируется запросами..
пишет что не может подконнектиться к ODBC@localhost. То есть не увидел $_SESSION['valid_user']. Если тоже самое прокрутить примерно так
mysql_connect("localhost", "root")
то все отлично работает.
Только мне необходима идентификация пользователя БД в течении сеанса. Вот в чем проблема. Есть мнения?
 
 Top
Dastar
Отправлено: 18 Января, 2008 - 19:52:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Янв. 2008  
Откуда: Израиль


Помог: -6 раз(а)




А ты инклудишь файл до или после открытия сессии?
А вообще, скрипты в студию!


-----
Не знаешь - молчи.
 
 Top
valenok Модератор
Отправлено: 18 Января, 2008 - 21:03:19
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Не понял.
Скрипты если можно.
(Добавление)
Инклуд и require делают тоже самое.
Разница только в типе возвращаемой ошибки в случае неудачи


-----
Truly yours, Sasha.
 
My status
 Top
Dastar
Отправлено: 18 Января, 2008 - 21:59:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Янв. 2008  
Откуда: Израиль


Помог: -6 раз(а)




А какая разница в возращаемой ошибке?


-----
Не знаешь - молчи.
 
 Top
face_86
Отправлено: 18 Января, 2008 - 23:47:01
Post Id



Новичок


Покинул форум
Сообщений всего: 45
Дата рег-ции: Янв. 2008  
Откуда: Старый Оскол


Помог: -2 раз(а)

[+]


apelido Какой у тебя порядок в скрипте есть ли до include что нибудь?
И есть ли в инклюдированом файле вывод на экран?

Цитата:
На примере одного скрипта(*): в него передаются параметры зарегестрированного пользователя для подключения к базе данных. Тут все в порядке. Но в него включается еще один скрипт с помощью include и там тоже нужны эти параметры, так вот там их я получить не могу. Потестив, я заметил, что этой включенной части даже SID не достается, то есть восстановить сессию ему просто не на чем.


Короче будет если код покажешь!!

(Отредактировано автором: 18 Января, 2008 - 23:48:07)



-----
Мечты сбываются
 
 Top
apelido
Отправлено: 19 Января, 2008 - 11:09:32
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




код бы с удовольствием показал, но он остался на работе, а я там окажусь только через несколько дней..
Тем более пришлось бы показывать штук цать скриптов, но как только доберусь - что-нибудь придумаю!
1. В последнем инклудируемом скрипте вывод есть (он творит форму для ввода).
2. да, файл инклудю после открытия сессии. Во всех скриптах.
3. Порядок с самого начала таков: форма для регистрации -> скрипт авторизации (записывает полученные от формы данные в переменные сессии) -> скрипт-сборщик (инклудирует отдельно меню и содержимое) -> в содержимом используются переменные сессии для обработки запроса(работает) (1) -> он включает следующий скрипт (в частности вот этот с формочкой ввода), где и возникают косяки (2)..
4. До инклуда есть много чего: в скрипте-сборщике установка доп переменных сессии и их проверка (настройки пользователя), в (1) как минимум коннект к БД (по-моему потом сразу include - подзабыл!)

То есть вот и вопрос - почему в одном месте работает (хотя тоже включение с инклудом), а следующий вложенный уже нет?
 
 Top
valenok Модератор
Отправлено: 19 Января, 2008 - 13:59:32
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




apelido
Вы хотябы вывод об ошибках поставьте.
Авось у вас сессия даже не ициализируется или стирается где то.

Dastar
Есть же мануал.
http://php.net/require
http://php.net/include

Если чтото там не поймёте - спрашивайте.
Но а Ctrl с , Ctrl v за вас зачем делать?


-----
Truly yours, Sasha.
 
My status
 Top
apelido
Отправлено: 30 Января, 2008 - 15:40:06
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




итак.. только щас смог добраться до кода..

1. в скрипте авторизации:
@session_start();
$_SESSION['valid_user']=$user; //значение переменной user скрипт получает из формы

2. В следующем скрипте:
@session_start();
$id=session_id();
echo $id." "; //печатаю идентифкатор сессии
$db=mysql_connect("localhost", $_SESSION['valid_user']);
mysql_select_db("test", $db);
...
include ".../assets_request.php?id=$id";


3. в инклудируемом скрипте:
@session_start();
$id=session_id();
echo $id." "; //печатаю идентифкатор сессии еще раз
...
$db=mysql_connect("localhost", $_SESSION['valid_user']);
mysql_select_db("test", $db);

так вот, идентификаторы не совпадают, файлы сессии множатся как а дрожжах при каждом переходе по ссылке (каждый раз инклудируемый скрипт(3) открывает новую сессию, в то время как (2) поддерживает одну и ту же)
что не так?

(Отредактировано автором: 30 Января, 2008 - 15:44:46)

 
 Top
valenok Модератор
Отправлено: 30 Января, 2008 - 15:55:23
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




А объясните зачем вы используете символ подавления ошибок у session_start ??
Новый метод борьбы с Headers already sent ?
(Добавление)
1. Зачем вам второй вызов session start в скрите assets_request.php ?
Я же сказал - include просто вставляет кусок кода в определённое место.
Делает за вас Ctrl C Ctrl V и не более.
Если вы мне не верите - проверьте !!
Следовательно вы не можете инклудировать x.php?id=$id . нет такого файла !

2. Объясните мне как оказалось что интерпретатор на вас не наехал по этому поводу ?
Я попросил выполнить указания статьи http://phpfaq[dot]ru/debug , в том числе и включение
вывода сообщений об ошибках. И заодно уберите все @ .

3.

.. открывает новую сессию, в то время как (2) поддерживает одну и ту же
что не так?


Ну и что же не так?
Это вопрос из серии:
Я попросил Колю написать "Привет". Скажите мне почему тут написанно " Привет" .


-----
Truly yours, Sasha.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB