P.S. session.auto-start=0 проблема не в этом, всегда вывожу значения идентификаторов и вижу, что на каждой странице разные значения, причем по post-у все передается ОК (проверял).
У кого какие идеи на этот счет, куда копать? Пожалуйста помогите понять эту "магию" (другого слово не нахожу для этой проблемы ).
Спустя 6 часов, 32 минуты, 42 секунды (29.10.2009 - 08:33) Michael написал(а):
Цитата (SirusVirus @ 28.10.2009 - 23:01) |
и последнюю в скрытом текстовом поле передаю по post и жму далее, |
Покажи код, как передаешь.
Спустя 3 часа, 4 минуты, 48 секунд (29.10.2009 - 11:38) SirusVirus написал(а):
Смысл этой проверки в том, чтобы во первых будет ясно, проходил ли пользователь первую страничку регистрации, или набил в адресе ссылку и попал на ШАГ 2, и во-вторых хочу создать защиту от заполнения формы с чужого хоста!!
HTML |
<?php session_start(); $sid = session_id(); ?> <p class="style32"><form method="post" action="index.php?cat=register&sub_cat=register&id=2"> <fieldset name="Site_Rules"> <legend class="style34">Соглашения</legend> <div class="style34"> <br /> <div name="siterules">Идет текст бла-бла.....</div><br /> <input name="Rules_Accept_Checkbox" type="checkbox" value="1" /> <span class="style32">Прочитал и готов выполнить все данное соглашение<br /> <input name="sid" type="hidden" value="<?php echo $sid; ?>" /> <input name="agree" type="submit" value="Далее" /></span></div></fieldset></form></p> |
вторая страница, где уже идет проверка
PHP |
<?php |
Спустя 21 минута, 6 секунд (29.10.2009 - 11:59) Michael написал(а):
Я думаю из моего следующего кода поймешь, что не так.
Тоже вставляю скрытое поле:
Тоже вставляю скрытое поле:
PHP |
$this->withoutCookie = ''; |
Спустя 11 часов, 2 минуты, 29 секунд (29.10.2009 - 23:02) SirusVirus написал(а):
value="' . session_id() . '" так я не смогу делать, ведь у меня html-форма, а не присвоение значения переменной! Это у вас обыкновенный кусок php кода - есть класс в котором есть функция проверяющая доступны ли cookie, если нет, то дает добро сессиям для управления пользователями.
P.S. Я вот сделал пример из двух файлов с передачей и сравнением двух значений session_id(), выяснилось, что все работает, и даже при обновлении этих 2-х страниц значения не меняются, а у меня в движке значения session_id() меняются даже при обновлении страницы, там по цепочке инклудятся 3 файла - я думая, что проблема именно в этом, хотя не понимаю конечно как это может быть связано!
P.S. Маленький вопрос - session_start() нужно обязательно делать в самом начале вообще всего кода??? То есть, если у меня есть index.php и он инклудит page1.php, то для работы сессий надо в index.php в самом начале session_start() сделать? А если это делать в page1.php то будет не правильно?
P.S. Я вот сделал пример из двух файлов с передачей и сравнением двух значений session_id(), выяснилось, что все работает, и даже при обновлении этих 2-х страниц значения не меняются, а у меня в движке значения session_id() меняются даже при обновлении страницы, там по цепочке инклудятся 3 файла - я думая, что проблема именно в этом, хотя не понимаю конечно как это может быть связано!
P.S. Маленький вопрос - session_start() нужно обязательно делать в самом начале вообще всего кода??? То есть, если у меня есть index.php и он инклудит page1.php, то для работы сессий надо в index.php в самом начале session_start() сделать? А если это делать в page1.php то будет не правильно?
Спустя 2 часа, 14 минут, 35 секунд (30.10.2009 - 01:16) SirusVirus написал(а):
УРА!! Так рад! Все таки эту проблему тоже решил!! В общем хочу тут пояснить все, может кто то тоже наступит на эти грабли и в Гугле наткнется на мой пост! Проблему решил так: вот этот кусок поставил на самом верху главного (и первого) файла, который работает при входе на сайт
PHP |
session_start(); |
Тут сразу возникнут восклицания - парень, почему ты тогда не додумался ??
Дело было в том (кроме того, что я новичок ), что я думал, что если с самого начала сделаю session_start, то потом после попадания на другую страничку, там уже не смогу снова сделать session_start (потому что у меня главный index.php файл, о котором тут много говорил, он общий, это он думает и решает что инклудить и все такое, остальные работают одноразно), думал что будет какой то конфликт... Но я ошибся, с самого начала логика была не правильная, а именно ЗАПОМНИТЕ - если у вас похожая конструкция работы сайта, и вы хотите использовать сессии, то в первом (главном обработчике - как у меня), в самом верху ставьте session_start, пусть он начинает сессию, и не беспокойтесь, потом в других файлах вы без проблем сможете вызывать эту же функцию столько, сколько захотите
P.S. В логах у меня были такие строчки
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent
Логическое объяснение и решение этого всего (и не только) можете найти вот тут Решение
Спустя 8 часов, 48 минут, 44 секунды (30.10.2009 - 10:05) Michael написал(а):
Я имел ввиду, то что ты пишешь
HTML |
<input name="sid" type="hidden" value="<?php echo $sid; ?>" /> |
Когда надо:
HTML |
<input name="PHPSESSID" type="hidden" value="<?php echo $sid; ?>" /> |
- это надо вставлять, чтобы при отключенных куках сессия передавалась.
А session_start() полюбому надо вызывать где-то вначале (до вывода html ), т.к. она формирует куки с PHPSESSID для отправки клиенту.
Спустя 30 минут, 42 секунды (30.10.2009 - 10:36) SirusVirus написал(а):
Цитата (Michael @ 30.10.2009 - 07:05) | ||
- это надо вставлять, чтобы при отключенных куках сессия передавалась. |
У меня в книжке написано, что сессии могут сохранятся как временный файл, или как cookie. Так какой же из этих методов по-дефолту работает?
Если я правильно понял, вставляя в имя PHPSESSID, я смогу передать по POST SID даже если куки будут отключены? Или вы имели ввиду $_SESSION?
Спустя 35 минут, 7 секунд (30.10.2009 - 11:11) Michael написал(а):
1. Куки включены у пользователя
session_start() при первом запуске формирует куку и отдает ее браузеру пользователя.
Когда пользователь запрашивает новую страницу его кука(сохраненная в браузере) "летит" на сервер, где session_start() ее и находит.
2. Куки отключены у пользователя
session_start() формирует константу SID и её (или session_id()) надо вручную
в php добавить в формы и в ссылки, чтобы при возврате пользователя
session_start() смогла найти идентификатор сессии в $_GET или $_POST
Есть правда настройка php.ini чтобы автоматом добавлялись SID во все URI,
но я не юзал. Может session.auto_start ? Правда выходит "некрасивый" адрес
если навигация с помощью форм.
session_start() при первом запуске формирует куку и отдает ее браузеру пользователя.
Когда пользователь запрашивает новую страницу его кука(сохраненная в браузере) "летит" на сервер, где session_start() ее и находит.
2. Куки отключены у пользователя
session_start() формирует константу SID и её (или session_id()) надо вручную
в php добавить в формы и в ссылки, чтобы при возврате пользователя
session_start() смогла найти идентификатор сессии в $_GET или $_POST
Есть правда настройка php.ini чтобы автоматом добавлялись SID во все URI,
но я не юзал. Может session.auto_start ? Правда выходит "некрасивый" адрес
если навигация с помощью форм.
Спустя 14 часов, 30 минут, 37 секунд (31.10.2009 - 01:41) SirusVirus написал(а):
Большое спасибо за помощь!
Спустя 1 месяц, 24 дня, 7 часов, 38 минут, 36 секунд (25.12.2009 - 09:20) eagilik написал(а):
Открыл сессию с именем 'VLV', для проверки вывел имя сессии и зарегистрировал переменную MSS
___________________________________________________________________
<?php
session_start();
?>
<?php
session_name( 'VLV' );
print session_name()."<br>";
$MSS = "NNNN";
session_register( "MSS" );
echo "\$MSS = $MSS<BR>";
?>
<br />
<a href="session.php"> !!!! </a><br />
____________________________________________________________________________________________________
браузер пишет
VLV
$MSS = NNNN
!!!!
______________________________________________________________________________________________________
на другой странице под ссылкой !!!! вызвал сессию 'VLV' и стартовал ее, затем вывел переменную MSS
__________________________________________
<?php
session_start();
print session_name()."<br>";
print ( $MSS );
if ( !empty ( $_SESSION[ "MSS" ] ) )
echo "YES";
else
echo "NO";
?>
____________________________________________________
на первой странице
нажимаю на !!!!
ответ браузера
______________________________________________________________________________________________________
VLV
Notice: Undefined variable: MSS in C:\Apache2.2\htdocs\session.php on line 7
NO
______________________________________________________________________________________________________
пожалуста помогите
___________________________________________________________________
<?php
session_start();
?>
<?php
session_name( 'VLV' );
print session_name()."<br>";
$MSS = "NNNN";
session_register( "MSS" );
echo "\$MSS = $MSS<BR>";
?>
<br />
<a href="session.php"> !!!! </a><br />
____________________________________________________________________________________________________
браузер пишет
VLV
$MSS = NNNN
!!!!
______________________________________________________________________________________________________
на другой странице под ссылкой !!!! вызвал сессию 'VLV' и стартовал ее, затем вывел переменную MSS
__________________________________________
<?php
session_start();
print session_name()."<br>";
print ( $MSS );
if ( !empty ( $_SESSION[ "MSS" ] ) )
echo "YES";
else
echo "NO";
?>
____________________________________________________
на первой странице
нажимаю на !!!!
ответ браузера
______________________________________________________________________________________________________
VLV
Notice: Undefined variable: MSS in C:\Apache2.2\htdocs\session.php on line 7
NO
______________________________________________________________________________________________________
пожалуста помогите
Спустя 6 минут, 38 секунд (25.12.2009 - 09:27) eagilik написал(а):
Может у меня ошибка где?