1 раз из 30-50 не стартует сессия. Как такое возможно?

Gennadi

Новичок
1 раз из 30-50 не стартует сессия. Как такое возможно?

Третий день бьюсь, не могу понять как это возможно. Очень надеюсь на ваш совет.
Окно состоит из двух фреймов, в каждый из которых подгружает свою HTML страницу. Обе страницы начинаются с
<?
Error_Reporting(1+2+4);
unset($tc);
session_start();
global $tc,$ABD, $Kurs;

в .htaccess прописана строка
php_value session.name ABD

в процессе работы пользователь вводит данные в форму первого фрейма, при нажатии кнопки сабмит, php скрипт должен прописать данные в сессию и снова вывести их в этом фрейме.
При нажатии кнопки сабмит второго фрейма, данные из сессии плюс данные второго фрейма прописываются в базу.
Но по непонятным причинам приблизительно 1 раз из 30-50 форма в превом фрейме обнуляется.
Тогда внутри формы я прописал тег
print "<input type=hidden name='ABD' value='$ABD'>";
если все работает нормально, то HTML код загруженной станицы имеет тег
<input type=hidden name='ABD' value='292a2c3d7f163c6da89bb320a1032c39'>

и в тот момент когда данные обнулились я посмотрел HTML код страницы, к своему удивлению я увидел
<input type=hidden name='ABD' value=''>

на сколько я понимаю если допустить что в скрипте есть ошибки, то они все равно ни как не должны сказываться на старте сессии. Если в начале прописано session_start(), то по-любому переменной $ABD должно было присвоится какое-то значение. Но время от времени это почему то не происходит.
 

Gennadi

Новичок
версия 4.4.7 safe_mode on
для работы с данными в сессии наверное правильнее использовать $_SESSION , но ведь это ни как не может сказываться на старте сессии. Или может?
 

dimagolov

Новичок
Gennadi, а смотреть значение session.name не пробывали за одно? зачем вообще этот изврат с именованием сессии?
 

Gennadi

Новичок
в начале я так и написал
$ssn = session_name();
print "<input type=hidden name='$ssn' value='$$ssn'>";

но потом подумал что это лишнее, так как имя переменной все равно уже определено в htaccess

и это не изврат, просто так сложилось исторически, раньше читал чтобы усложнить жизнь хакерам лучше не использовать стандартные имена. И потом это ведь не относится к сути вопроса.
 

dimagolov

Новичок
я так понимаю, что стоит register_globals on и переменная ABC в глобальной области видимости возникает от того, что с клиента передается кука ABC. Но временами кука не передается и получается лажа.
session_name ни для чего как для установки куки не используется больше.
 

Gennadi

Новичок
register_globals on
Сам я в куки ничего не прописываю и не беру от туда, php это делает автоматом, я проверил на своем компе куки, там четко прописана та сессия с которой я работаю, но похоже что то подобное происходит видимо кука не читается или слетает, но как это проверить не знаю. И на сколько я понимаю если куки не работают, PHP должен сам вставить тег который я вставлял принудительно
<input type=hidden name='ABD' value='292a2c3d7f163c6da89bb320a1032c39'>
И уж здесь то должно быть все равно была кука или нет а данные все равно исчезают. Скорее всего может прав Александр, по поводу safe_mode, но тогда не понятно почему же все таки эти сбои проскакивают достаточно редко. А так все работает.
 

dimagolov

Новичок
Gennadi, вам сюда

вообще IE как я помню при создании нового окна куки (и сессию) не копирует как я помню. по крайней мере я в тех случаях, когда мне нужно открыть новое окно и передать в него сессию делаю это в GET-параметре беря руцями из кук в JS.

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

вообще ман - кладязь мудрости ;)
 

Gennadi

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

dimagolov

Новичок
Gennadi, по первому разу прощу (про флуд).
проблема ваша не в том, что сессия куда-то девается, а в том, что на клиенте оказывается в разных фреймах разные куки. и разбираться надо не "почему не стартует сессия" а "почему в фреймах разные куки". то есть нужно отлаживать клиентскую часть чтобы разобраться что там происходит. во всей ветке клиетского кода пока что 0, так что по существу Вам было сказано все, что было возможно, и проблему идентифицировали, если Вы этого еще не поняли.
 

Gennadi

Новичок
Извините за некоторую резкость в предидущем сообщении, но вы не видите что я писал. Вы передаете в GET параметре, а я по вашему где передаю, если в форму вставляю тег
<input type=hidden name='ABD' value='292a2c3d7f163c6da89bb320a1032c39'>
а поповоду того что делается автоматом вам стоит почитать повнимательнее мануал.

-~{}~ 26.09.07 00:13:

Дим, блин, да не оказываются в разных фреймах разные куки, об этом ни пол слова не писалось. Какая бы кука не была старая или новая, PHP должен присвоить переменной ABD какое то значение если сессия стартовала. Не важно пока новое или старое, но он этого НЕ ДЕЛАЕТ.
 

dimagolov

Новичок
Gennadi, проблема возникает в форме которая пишет в сессию или которая читает?
просто сессия убивается пхп, если ее не обновляют определенное время, то есть если в ней не меняют какую-то переменную. Есть подозрение, что если переприсваивается то же значение переменной, то файл сессии не обновляется и сессия может умереть.
 

Beavis

Banned
а не может это быть что в основном первым грузится один фрейм, а 1 раз из 30-50 первым грузится другой?
 

Фанат

oncle terrible
Команда форума
dimagolov
А ты кто такой, чтобы кого-то здесь прощать? пшел вон на место.

Gennadi
Совет у нас будет только один - отлаживать свою систему.
PHP FAQ: Ничего не работает! Что делать???
Вперед и с песней.
приведенной информации явно недостаточно для того, чтобы отсюда угадать - что там и почему не стартует.

Не стоит указывать другим посетителям, что и как им писать. Даже если этот посетитель, такой дурак, как dimagolov, который и с 5 раза не понимает, что сессия не стартует.
И уж тем более не надо заявлять капризным тоном, что все, мол читал. По коду совсем не видно, что читал.
При написании программ на PHP следует руководствоваться знаниями и документацией, а не сувевериями и слухами.
имя переменной у него хакеров останавливает.
оператор global в начале скрипта - это тоже, видимо, из области шаманских заклинаний. помогает от сглаза и диареи.
анекдот.

разбирайся со своим стартом сессии.
почему в error_reporting стоит 7 а не 2047?
где проверка сразу после session_start? почему "не стартует" сессия у тебя в начале скрипта, а проверка этого - где-то в конце формы? где логика?
 

Gennadi

Новичок
dimagolov
ПХП не убивает сессию, там обновляется все довольно часто. Я кажется начинаю понимать что там происходит, только не знаю кто виноват, наверное настройки PHP, но я не очень силен в этой области.

ФАНАТ

Тон, не капризный , а уставший и несколько раздраженный от непонимания. По поводу суеверий, многие програмисты любят поплясать с шаманским бубном, и как правило это помогает. Приходит какая нибудь полезная мысля.
По поводу имени переменной которая останавливает хакеров, я не сам придумал а взял из статьи "все о сессиях" с сайта phpclub.ru , правда это было лет 5 назад, с тех пор просто так и осталось. Конечно от хакера это не спасет. Просто как я писал сложилось исторически.
По поводу GLOBAL. Ка вы поняли я не такой большой спец в PHP поэтому и обратился за помощью. Я не знаю сколько проходов делает транслятор PHP и есть ли для него разница в конце прописывать или в начале.
Теперь по существу. Написал простой скрипт
<?php
function session_started(){
if(isset($_SESSION)){ print "ok<br>"; }else{ print ":("; }
}


session_start();

session_started();
$ssn= session_name();
$ssnn=$$ssn;
print "ssn=$ssn => '$ssnn'<br>";
?>
и увидел что при отключенных куках у меня выводится
ssn=ABD => ''
на сколько я понимаю значение переменной должно присваиваться и при отключенных куках, оно не присваивается. Наверное все таки проблема в настройке PHP. Но я там не бумбум.
 

Фанат

oncle terrible
Команда форума
Я не знаю сколько проходов делает транслятор PHP и есть ли для него разница в конце прописывать или в начале.
а зачем вообще прописывать?
зачем вообще писать оператор, смысла которого ты не знаешь, и который не делает вообще ничего?
одно дело - полезные мысли, и совсем другое - бессмысленный код.
зачем делать такое умное лицо и писать про проходы транслятора вместо того, чтобы посмотреть в документации? что на самом деле делает этот оператор и где применяется, а где - просто висит без всякого смысла.
господи боже мой.
ну откуда ты взял этот ужас? тоже на форуме 5 лет назад прочитал?
почему не написать нормально - session_id()?

и при чем здесь куки воробще если ты проверяешь не куки, а ответ на вопрос - стартовала ли у тебя сессия?
где вывод функции session_started()?

Даже если ты и небольшой спец в пхп, то все равно - ВСЮ информацию о твоих проблемах мы получаем через тебя. поэтому, будь ты даже полный ноль в пхп - тебе все равно придется совершать какие-то осмысленные телодвижения по локализации проблемы. Которые для тебя сводятся, почему-то, к поиску дурной переменной.
и размышлениях на тему, нет ли в пхп настройки, которая раз 50 раз убивает сессию...

В общем, так. за 5 лет много чего поменялось.
Поэтому, уж не сочти за труд прочитать PHP FAQ: Сессии. Подробное описание работы и объяснение механизма.
и оформить работу с сессиями в точности так, как там написано.
Ниего не добавляляя от себя и ничего не убирая.

А так же выполни все рекомендации по поиску ошибок, которые там есть.
 
Сверху