Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2009, 15:30   #1
vlad-55
Пользователь
 
Регистрация: 21.02.2009
Сообщений: 44
По умолчанию Как работает механизм сессий?

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

Так в теории.

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

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

На одном файле стоит код
<?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

Как можно это прокомментировать?
vlad-55 вне форума Ответить с цитированием
Старый 21.02.2009, 18:56   #2
Rus 47
Пользователь
 
Регистрация: 13.12.2008
Сообщений: 28
По умолчанию

Сессии передаются в куках если в файле php.ini значение session.use_cookies равно 1, а если 0 - то не передаётся.
А если значение session.use_trans_sid в том же файле php.ini равно 1 то идентификатор сессии передаётся путём добавления его к URL адресу и формам.
А если 0 - не передает.
То есть как и в теории url будет иметь вид:
<a href="/index.php?PHPSESSID=7gsd4g53ghye783 ">
а к формам добавляется новое скрытое поле (элемент hidden):
<input type="hidden" name="PHPSESSID" value="7gsd4g53ghye783">

Тогда возможно что в вашем php.ini значение session.use_trans_sid на нуле.

Последний раз редактировалось Rus 47; 21.02.2009 в 18:59.
Rus 47 вне форума Ответить с цитированием
Старый 21.02.2009, 19:43   #3
vlad-55
Пользователь
 
Регистрация: 21.02.2009
Сообщений: 44
По умолчанию

А Вы лично видели, чтобы так реально передавались сессии?

Если я пришлю Вам эти два тестовых файла, Вы можете попробовать их у себя?
vlad-55 вне форума Ответить с цитированием
Старый 21.02.2009, 19:53   #4
Rus 47
Пользователь
 
Регистрация: 13.12.2008
Сообщений: 28
По умолчанию

Присылйте, посмотрю.

А вообще я уже проверил, и не один раз, создавал два файла:
На одном файле стоит код
<?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();

?>

В зависимости от включенных\отключенных куки и настроек файла php.ini всё происходило так как я описал.
Rus 47 вне форума Ответить с цитированием
Старый 21.02.2009, 20:07   #5
vlad-55
Пользователь
 
Регистрация: 21.02.2009
Сообщений: 44
По умолчанию

Эти файлы я и предполагал послать. Но раз Вы эти коды уже попробовали, то посылать файлы не за чем.

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

Я покажу это своей техподдержке, которая утверждает, что сие невозможно. Пусть увидят своими глазами...
vlad-55 вне форума Ответить с цитированием
Старый 21.02.2009, 20:19   #6
Rus 47
Пользователь
 
Регистрация: 13.12.2008
Сообщений: 28
По умолчанию

Показать не могу, так как проверял на локальном сервере.
А запись в файле php.ini имеет такой вид:

session.use_cookies = 0
session.use_trans_sid = 1

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

А вообще для передачи сессийиспользуется глобальный массив $_SESSION['имя']
тоесть идентификатор сессий можно передать следующим образом:
$_SESSION['id'] = session_id();

но если оба значения :
session.use_cookies и session.use_trans_sid будут равны нулю то ничего передаваться не будет.
Rus 47 вне форума Ответить с цитированием
Старый 21.02.2009, 20:42   #7
vlad-55
Пользователь
 
Регистрация: 21.02.2009
Сообщений: 44
По умолчанию

А в сети разместить не можете?

Хотя бы на полчаса?
vlad-55 вне форума Ответить с цитированием
Старый 21.02.2009, 21:25   #8
Rus 47
Пользователь
 
Регистрация: 13.12.2008
Сообщений: 28
По умолчанию

К сожалению не могу, могу залить куда нибудь те две страницы и свой файл php.ini если хотите
Rus 47 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает процессор? Иллидан Компьютерное железо 13 17.07.2011 14:04
Как работает Include ToxaRUS Паскаль, Turbo Pascal, PascalABC.NET 2 20.01.2009 16:04
составил программу ,но ненравиться механизм работы.помогите улучшить Василийпрог Помощь студентам 1 23.11.2008 11:38
Как работает win rar? Altera Свободное общение 2 30.03.2008 08:05