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

Форум PHP

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

 

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

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

тема: Практика использования механизма сессий
 
 автор: Владимир55   (21.02.2009 в 10:56)   письмо автору
 
 

Насколько я понял, последние версии рнр устроены так, что если в броузере посетителя включены куки, то идентификатор сессии передается через них. А если куки запрещены, то рнр сам автоматически дописывает в УРЛ каждой ссылки нечто вроде ?PHPSESSID=ac4f4a45bdc893434c95dcaffb1c1811

Так в теории.

Но на практике происходит нечто другое: если куки включены, то механизм сессии работает, а если куки отключены, то механизм сессии не действует. По крайней мере, у меня на ВДС наблюдается именно такая ситуация. И если не делать никаких ухищрений, то с выключенными куки сессия не передается. Хотя, теоретически, должна передаваться. Без дополнительных мер.

Понимая, что мои знания рнр весьма ограничены и настройка рнр на моем ВДС может быть не идеальна, я разместил тестовые файлы на стандартном хостинге, настроенном профессионалами.

На одном файле стоит код
<?php

    session_start
();
    echo 
session_id();

?>

<p style="text-indent: 1px; margin-left: 25px; margin-top: 0; margin-bottom: 0">
<font face="Arial"><b><a href="889.php">Переход на 889</a></b></font></p>

А в другом файле
<?php

    session_start
();
    echo 
session_id();

?>


И здесь весьма наглядно проступает та же ситуация:
- если в броузере куки разрешены, сессия переходит с одного файла на другой;
- если в броузере куки запрещены, то сессия не переходит и во вновь открытом файле формируется новый идентификатор сессии.

Вот взгляните сами:
http://vova.1gb.ru/888.php

Как можно это прокомментировать?

  Ответить  
 
 автор: Владимир55   (21.02.2009 в 12:39)   письмо автору
456 байт
 
   для: Владимир55   (21.02.2009 в 10:56)
 

Чисто из любопытства я поместил упомянутые тестовые файлы в Приложение.

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

  Ответить  
 
 автор: Владимир55   (22.02.2009 в 09:38)   письмо автору
 
   для: Владимир55   (21.02.2009 в 12:39)
 

Может, кто-нибудь хоть на час разместит у себя те два файла, что в Приложении, и даст на них ссылочку?

Очень уж хочется увидеть своими глазами правильную работу сессий!

  Ответить  
 
 автор: BinLaden   (22.02.2009 в 10:45)   письмо автору
 
   для: Владимир55   (21.02.2009 в 10:56)
 

> И если не делать никаких ухищрений, то с выключенными куки сессия не передается.

Передаётся. В адресной строке видите "...889.php?PHPSESSID=..."?

  Ответить  
 
 автор: Владимир55   (22.02.2009 в 10:59)   письмо автору
 
   для: BinLaden   (22.02.2009 в 10:45)
 

Вероятно, Вы смотрели в тот момент, когда я делал какие-то манипуляции с кодом.

Сейчас код в полном соответствии с тем, как я его написал выше.

И сессий нет.

  Ответить  
 
 автор: BinLaden   (22.02.2009 в 11:12)   письмо автору
 
   для: Владимир55   (22.02.2009 в 10:59)
 

<?php
echo 'session.use_only_cookies is "' ini_get('session.use_only_cookies') . '"';
?>

Что показывает данный код?

  Ответить  
 
 автор: Владимир55   (22.02.2009 в 11:21)   письмо автору
 
   для: BinLaden   (22.02.2009 в 11:12)
 

session.use_only_cookies is "0"

И что это?

  Ответить  
 
 автор: BinLaden   (22.02.2009 в 11:40)   письмо автору
 
   для: Владимир55   (22.02.2009 в 11:21)
 

Передавать идентификатор только через cookie. В общем-то этот параметр у Вас отключен.

Посмотрите аналогично параметр "session.use_trans_sid ":
<?php 
echo 'session.use_trans_sid is "' ini_get('session.use_trans_sid') . '"'
?>

Насколько я знаю именно он отвечает за автоматическое добавление идентификатора сессии к ссылкам.

P.S. Лучше, IMHO, самому добавлять идентификатор, пропустив каждую ссылку через свою функцию.

  Ответить  
 
 автор: Владимир55   (22.02.2009 в 11:52)   письмо автору
 
   для: BinLaden   (22.02.2009 в 11:40)
 

Выводит session.use_trans_sid is "0"

"P.S. Лучше, IMHO, самому добавлять идентификатор, пропустив каждую ссылку через свою функцию."

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

Скажите, а чем это лучше?

  Ответить  
 
 автор: BinLaden   (22.02.2009 в 12:09)   письмо автору
 
   для: Владимир55   (22.02.2009 в 11:52)
 

> Выводит session.use_trans_sid is "0"

Попробуйте
<?php
ini_set
('session.use_trans_sid'1);
?>


> Скажите, а чем это лучше?
Хотя бы тем, что мы избавляемся от этого сомнительного автоматического способа. Я не доверяю use_trans_sid.

> Но переделать предстоит почти 80.000 страниц
Каждая страница свой файл на диске имеет что ли? Вам, по-моему, переделать надо гораздо больше.

  Ответить  
 
 автор: Владимир55   (22.02.2009 в 12:19)   письмо автору
 
   для: BinLaden   (22.02.2009 в 12:09)
 

Я как раз это и сделал в то время, пока Вы писали ответ. Сейчас в коде записано вот что:
ini_set("session.use_trans_sid", true);
    session_start();
    echo"<br>",  session_id(), "<br>";
    echo 'session.use_trans_sid is "' . ini_get('session.use_trans_sid') . '"', "<br>";
    echo 'session.use_only_cookies is "' . ini_get('session.use_only_cookies') . '"';


С выключенными куки работает именно так, как и ожидалось - сессия передается через УРЛ.

Но попробуйте не кликать, а перенести в броузер мышкой вот этот адрес http://vova.1gb.ru/888.php , и Вы увидите, что при ВКЛЮЧЕННЫХ куки сессия всё равно передается через УРЛ!

Как это можно объяснить?

  Ответить  
 
 автор: BinLaden   (22.02.2009 в 12:28)   письмо автору
 
   для: Владимир55   (22.02.2009 в 12:19)
 

> Вы увидите, что при ВКЛЮЧЕННЫХ куки сессия всё равно передается через УРЛ!

Нет, я этого не вижу. Такое возможно увидеть лишь в самый первый раз при заходе на страницу, когда в браузере cookie не установлена и сервер еще не знает поддерживает ли клиент cookies.

  Ответить  
 
 автор: Владимир55   (22.02.2009 в 15:00)   письмо автору
 
   для: BinLaden   (22.02.2009 в 12:28)
 

> Но переделать предстоит почти 80.000 страниц
Каждая страница свой файл на диске имеет что ли?

Да, каждая страница имеет свой файл. А как ещё их можно выполнить?

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

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