Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Потеря сессионых данных
 
 автор: kosta_in_net   (29.01.2010 в 19:42)   письмо автору
 
 

Столкнулся с ранее невиданной проблемой:
в каталоге test запускаем файл и регистрируем в нем некую сессионную переменную, после чего переходим к другому файлу ЭТОГО ЖЕ каталога. Данные сессии, как и положено, сохраняются. Но если подняться на уровень вверх, данные сессии не видны. Что бы это могло быть?

  Ответить  
 
 автор: oliss   (29.01.2010 в 22:07)   письмо автору
 
   для: kosta_in_net   (29.01.2010 в 19:42)
 

А сессия там стартуёт ?

  Ответить  
 
 автор: kosta_in_net   (01.02.2010 в 10:27)   письмо автору
 
   для: oliss   (29.01.2010 в 22:07)
 

каждый файл начинается с
$sid=session_id();
if(!$sid){
session_start();
}

  Ответить  
 
 автор: t3ma   (01.02.2010 в 10:37)   письмо автору
 
   для: kosta_in_net   (01.02.2010 в 10:27)
 

$sid всегда будет присвоен уникальный id, следовательно session_start() не запускается, поэтому ссесии не видны.


<?php
$sid 
session_id();
session_start();
?>

  Ответить  
 
 автор: Trianon   (01.02.2010 в 10:42)   письмо автору
 
   для: t3ma   (01.02.2010 в 10:37)
 

>$sid всегда будет присвоен уникальный id, следовательно session_start() не запускается, поэтому ссесии не видны.

А я вот, перед тем, как такое написать, заглянул в мануал, и таки избежал пяти минут позора.
Мелочь, а приятно.

  Ответить  
 
 автор: t3ma   (01.02.2010 в 10:45)   письмо автору
 
   для: Trianon   (01.02.2010 в 10:42)
 

а что в мануале ? session_id всегда будет уникальный id если его нет то он его получит

  Ответить  
 
 автор: Trianon   (01.02.2010 в 10:47)   письмо автору
 
   для: t3ma   (01.02.2010 в 10:45)
 

Я не буду с Вами спорить.

  Ответить  
 
 автор: kosta_in_net   (18.02.2010 в 23:23)   письмо автору
 
   для: t3ma   (01.02.2010 в 10:37)
 

session_id дает уникальное значение, если сессия установлена. Если сессия не начиналась, там будет пусто. Если бы я ошибался, мой код не работал бы нигде. А он работает на сотнях сайтов и десятках серверов. Но на одном сервере, по не известным мне причинам, это работает только внутри того каталога, в котором сессия началась. В другие каталоги данные сессии не передаются. Хостеры ничего вразумительного сказать не могут. Пришлось вместо сессия применить сессионные куки (куки, без указания времени). В куках я просто указал, что они действительны для всего сайта, а не только для текущего каталога.
Но вопрос остается в силе: почему сессии могут не работать в другом каталоге?

  Ответить  
 
 автор: Рома   (18.02.2010 в 23:50)   письмо автору
 
   для: kosta_in_net   (18.02.2010 в 23:23)
 

сессии работают в любом каталоге.

  Ответить  
 
 автор: psychomc   (19.02.2010 в 01:12)   письмо автору
 
   для: kosta_in_net   (18.02.2010 в 23:23)
 

возникают сомнения на счёт сотни сайтов :)

  Ответить  
 
 автор: heed   (21.02.2010 в 17:36)   письмо автору
 
   для: kosta_in_net   (18.02.2010 в 23:23)
 

если только там изменили переменную session.cookie_path , которая по умолчанию "/"
, или если одн ссылка была с www. , а другая без него

// вообще-то да
$sid = session_id();
должно быть после
session_start();

  Ответить  
 
 автор: Commander   (19.02.2010 в 09:27)   письмо автору
 
   для: kosta_in_net   (01.02.2010 в 10:27)
 

Почему бы просто не написать session_start();?

  Ответить  
 
 автор: tvv123456   (21.02.2010 в 17:02)   письмо автору
 
   для: Commander   (19.02.2010 в 09:27)
 

У меня на моем хостинге и только на нем вот какая штука бывает:

<?
// ну тут где-нибудь стартуем сессию и все как обычно а дальше
$_SESSION['a'] = $a;
//тут дальше код какой-нить
// а вот дальше самое интересное
if(что-то тру$a =0// то что в скобках возвращает ложь но почему то сразу теряеться сессия то есть пропадает $_SESSION['a']



такая проблема только на моем хостинге, на локальной машине и других хостингах работает на отлично

  Ответить  
 
 автор: Trianon   (22.02.2010 в 00:30)   письмо автору
 
   для: tvv123456   (21.02.2010 в 17:02)
 

может у Вас там что-то не то с регстер_глобалс и/или session_register() понакручено?

  Ответить  
 
 автор: tvv123456   (22.02.2010 в 02:38)   письмо автору
 
   для: Trianon   (22.02.2010 в 00:30)
 

Глобалс точно выключено а вот насчет session_register() - ни разу не пользовался

  Ответить  
 
 автор: kosta_in_net   (03.04.2010 в 18:44)   письмо автору
 
   для: tvv123456   (22.02.2010 в 02:38)
 

session_id() стартует сессию автоматически
в тот раз я заменил все куками. Но сегодня еще раз столкнулся с этим же гемороем. Хостерам нужно меньше школу прогуливать. session.save_path у них пустой оказался (думаю, первый геморой был таким же, но я, скорей всего, не обратил внимания, так как еще не знал, где рыть). Накидал, где нужно файлов php.ini с session.save_path=/tmp и все заработало. С пустым session.save_path сервер, очевидно, хранил сессии в том же каталоге и, в другом, естественно, они не работали.

  Ответить  
 
 автор: Trianon   (03.04.2010 в 19:54)   письмо автору
 
   для: kosta_in_net   (03.04.2010 в 18:44)
 

>Накидал, где нужно файлов php.ini с session.save_path=/tmp и все заработало.
пардон... Вы теперь сессии храните в общем каталоге с другими клиентами этого хостинга?
Не страшно?

  Ответить  
 
 автор: kosta_in_net   (04.04.2010 в 08:29)   письмо автору
 
   для: Trianon   (03.04.2010 в 19:54)
 

какое решение, по-вашему, будет лучше?

  Ответить  
 
 автор: Trianon   (04.04.2010 в 08:51)   письмо автору
 
   для: kosta_in_net   (04.04.2010 в 08:29)
 

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

Наверно там всё же стоит прописать какой-то путь в рамках собственной эккаунтт-иерархии?
И может быть не стоило так уж крошить батон на хостера за незаполненное поле session path?

  Ответить  
 
 автор: kosta_in_net   (04.04.2010 в 09:53)   письмо автору
 
   для: Trianon   (04.04.2010 в 08:51)
 

на счет батона все просто: не определив каталог для сессий, они создали ситуацию когда мусор сыпался где ни попадя. Кроме того, если б они понимали в настройках сервера больше чем я, они смогли бы ответить, почему сессии не сохраняются при смене каталога. А так, устав задавать им вопросы, я обращался на форум, мучил гугла и, не надя ответа, экспериментировал сам, пока не обнаружил причину.
На счет конкретного пути: я сравнивал конфигурацию нескольких хостингов. На тех, где с сессиями проблем небыло, стоял /tmp. Там, где было проблема, путь для сессий не был указан. По-этому, не мудрствуя лукаво и не видя ничего страшного в ПОТЕНЦИАЛЬНОЙ возможности (а где ее нет?), получить пароль к НЕИЗВЕСТНОМУ месту, при условии, что хостинг будет взломан именно в момент сессии (при том, что взлом хостинга несет проблемы независимо от сессий), я сделал так же, как на других серверах. Посмотрите, кстати, на своем сервере. Скорей всего вы увидите именно /tmp. Можно было бы прописать путь к своей папке. Но вероятность накопления мусора в ней была бы выше, чем в папках, настроенных хостерами. По идее, они должны следить за ними и чистить при всяких перезапусках и т. д.

  Ответить  
 
 автор: Valick   (04.04.2010 в 10:49)   письмо автору
 
   для: kosta_in_net   (04.04.2010 в 09:53)
 

хреновато у вас с теорией, и это как раз та ситуация когда практика фиг поможет.
отсюда и головная боль. сессионный мусор убирается по хитрому алгоритму. про взлом хостера речь не шла, речь была о том что ваш сосед по хостингу может смотреть любую информацию в этой самой папке /tmp

  Ответить  
 
 автор: Trianon   (04.04.2010 в 13:06)   письмо автору
 
   для: kosta_in_net   (04.04.2010 в 09:53)
 

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

  Ответить  
 
 автор: kosta_in_net   (04.04.2010 в 13:42)   письмо автору
 
   для: Trianon   (04.04.2010 в 13:06)
 

В ваших аргументах есть определенный резон. Абсолютный путь к своему темпу пропишу. Но, хостерам все рабно крошки от батона. Они-то должны знать, почему сессии могут не сохраняться. Представляете себе админа, который не знает, почему данные могут не сохраняться?

  Ответить  
 
 автор: Trianon   (04.04.2010 в 12:59)   письмо автору
 
   для: tvv123456   (21.02.2010 в 17:02)
 

Твою налево... Когда же до вас дойдет, что листинги нужно делать так, чтобы они помещались в экран по ширине... :-\\\

  Ответить  
 
 автор: Valick   (04.04.2010 в 13:50)   письмо автору
 
   для: Trianon   (04.04.2010 в 12:59)
 

проблема в том что ширина у всех разная :)

  Ответить  
 
 автор: **   (04.04.2010 в 13:56)
 
   для: Trianon   (04.04.2010 в 12:59)
 

это у кого какая ширина, у меня при 130% увеличении помещается, но читал на 170% :)
(1280x720 + 115%(110px/дюйм) + "подогнать по ширине" и 170% и в "опере")

  Ответить  
 
 автор: Николай2357   (04.04.2010 в 14:12)   письмо автору
 
   для: **   (04.04.2010 в 13:56)
 

Пока стандарт для разработки 1024Х768
И хотя это уже редкость, все же нужно учитывать, если хочется соответствовать.

  Ответить  
 
 автор: tvv123456   (04.04.2010 в 15:48)   письмо автору
 
   для: Trianon   (04.04.2010 в 12:59)
 

>Твою налево... Когда же до вас дойдет, что листинги нужно делать так, чтобы они помещались в экран по ширине... :-\\\

Дак я так обчыно и стараюсь делать. У меня помещаеться даже очень хорошо еще и места куча остаеться(даже при ширине 1024 пикселя все норм)

Кстати как то страно что это вам только через пол-месяца взбелсио после того как было сообщение оставлено :)))))))))))))

  Ответить  
 
 автор: Trianon   (05.04.2010 в 00:40)   письмо автору
 
   для: tvv123456   (04.04.2010 в 15:48)
 

да. Потому что повода не было - на коммуникаторе я открыл эту страницу только сегодня.
Я без повода не ругаюсь.
А ширина текста меряется в символах, а не в пикселах.
И 80 символов в строку - красная цена.

  Ответить  
 
 автор: tvv123456   (05.04.2010 в 00:54)   письмо автору
 
   для: Trianon   (05.04.2010 в 00:40)
 

ну уж извините:) Для каммуникатора я высчитывать символы сидеть не буду, если у меня страница будет улезать или будет близка к краю, то я подгоню количество симоволов а так это уже просто абсурд :))))

  Ответить  
 
 автор: Trianon   (05.04.2010 в 01:18)   письмо автору
 
   для: tvv123456   (05.04.2010 в 00:54)
 

Вам для коммуникатора их высчитывать никто и не предлагает.
Обычные традиционные требования к листингу таковы, что он должен нормально просматриваться и печататься. И 80 символов - оптимальная ширина строки для просмотра и печати.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования