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

Форум PHP

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

 

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

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

тема: Потерялась сессия
 
 автор: Владимир55   (18.01.2009 в 22:03)   письмо автору
 
 

На первой странице такой код:
<?php
    session_start
();
$novo $_SESSION['novo'];
$ksex "sex" $novo;
    
$sex = @$_POST[$ksex];
    
$_SESSION['sex'] = $sex;

//echo "SEX= $sex ";  // Для настройки
//die;                // Для настройки

        
header('Location: tst.htm');
        exit;
Информация в переменную $sex поступает - это я проверил.

А на той странице, на которую осуществляется переход, установлен такой код:
<?php
session_start
();
ob_start();

$sex $_SESSION['sex'];
echo 
"<br>sex= $sex";
?>
И переменной $sex уже нет...

Куда же она могла подеваться?

  Ответить  
 
 автор: Николай2357   (18.01.2009 в 22:26)   письмо автору
 
   для: Владимир55   (18.01.2009 в 22:03)
 

Ну как же нет? Вы же начали буфферизацию, так почему не закончили?
<?php 
session_start
(); 
ob_start(); 

$sex $_SESSION['sex']; 
echo 
$sex;
$buffer ob_get_contents();
ob_end_clean();
echo 
"<br>sex= $buffer"
?>

  Ответить  
 
 автор: Владимир55   (18.01.2009 в 22:36)   письмо автору
 
   для: Николай2357   (18.01.2009 в 22:26)
 

Нет, не заработало!!!!!!

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

В каких случаях сессия может не работать?

Вот для примера я добавляю в первый файл
$_SESSION['flag'] = "flag" ;
, а во втором файле убираю вообще все и пишу

<?php
session_start
();
ob_start();

$flag $_SESSION['flag'];
echo 
"<br>flag $flag "
И не передается информация!

  Ответить  
 
 автор: Рома   (18.01.2009 в 22:50)   письмо автору
 
   для: Владимир55   (18.01.2009 в 22:36)
 

переменную из кавычек вынеси - заработает


echo "<br>sex= ".$buffer;

  Ответить  
 
 автор: Владимир55   (18.01.2009 в 22:56)   письмо автору
 
   для: Рома   (18.01.2009 в 22:50)
 

На мой взгляд, это идентичное выражение...

Во всяком случае, всё равно не работает...

  Ответить  
 
 автор: Рома   (18.01.2009 в 23:00)   письмо автору
 
   для: Владимир55   (18.01.2009 в 22:56)
 

а на мой взгляд это абсолютно разные вещи


echo "<br>sex= $buffer";

и

echo "<br>sex= ".$buffer;

  Ответить  
 
 автор: Владимир55   (18.01.2009 в 23:05)   письмо автору
 
   для: Рома   (18.01.2009 в 23:00)
 

Не работает ни так, ни так...

  Ответить  
 
 автор: Николай2357   (18.01.2009 в 23:19)   письмо автору
 
   для: Владимир55   (18.01.2009 в 23:05)
 

А страница, на которую переход, у Вас tst.htm? А настройки Вы сделали, чтоб в htm файлах исполнялся php код?

  Ответить  
 
 автор: Владимир55   (18.01.2009 в 23:48)   письмо автору
 
   для: Николай2357   (18.01.2009 в 23:19)
 

Конечно.

  Ответить  
 
 автор: Николай2357   (18.01.2009 в 23:14)   письмо автору
 
   для: Рома   (18.01.2009 в 23:00)
 

>а на мой взгляд это абсолютно разные вещи
В строке, обрамленной двойными кавычками, переменная остается переменной.

  Ответить  
 
 автор: Trianon   (18.01.2009 в 23:15)   письмо автору
 
   для: Рома   (18.01.2009 в 23:00)
 

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

  Ответить  
 
 автор: Рома   (18.01.2009 в 23:24)   письмо автору
 
   для: Trianon   (18.01.2009 в 23:15)
 

учту

  Ответить  
 
 автор: Trianon   (18.01.2009 в 23:20)   письмо автору
 
   для: Владимир55   (18.01.2009 в 22:36)
 

уберите ob_start();

Кроме того, может понадобиться в адресе в поле Location: добавить идентификатор сессии явным образом.

  Ответить  
 
 автор: Valick   (18.01.2009 в 23:34)   письмо автору
 
   для: Trianon   (18.01.2009 в 23:20)
 

Д.Котеров советует делать так:

ini_set("session.use_trans_sid",true);
// Старт сессии
session_start();

  Ответить  
 
 автор: Trianon   (18.01.2009 в 23:58)   письмо автору
 
   для: Valick   (18.01.2009 в 23:34)
 

ну или так, да.

  Ответить  
 
 автор: Владимир55   (19.01.2009 в 00:03)   письмо автору
 
   для: Trianon   (18.01.2009 в 23:58)
 

Нет, так не работает. Диагностическое сообщение - Undefined index: sex

Как ввести идентификатор сессии явным образом, как Вы об этом говорили?

  Ответить  
 
 автор: Trianon   (19.01.2009 в 00:18)   письмо автору
 
   для: Владимир55   (19.01.2009 в 00:03)
 

<?php
    session_start
(); 

//....

       
header('Location: tst.htm?' SID );
       exit;
?>

а tst.htm - это точно php-скрипт?

  Ответить  
 
 автор: Владимир55   (19.01.2009 в 00:28)   письмо автору
 
   для: Trianon   (19.01.2009 в 00:18)
 

Да, это php-скрипт. А код разметки есть в этом же файле, но идет ниже скрипта.

И теперь, с Вашей помощью, всё заработало!

За что БОЛЬШОЕ спасибо!

  Ответить  
 
 автор: Владимир55   (18.01.2009 в 23:46)   письмо автору
 
   для: Trianon   (18.01.2009 в 23:20)
 

ob_start(); убрал. Диагностическое сообщение - Undefined index: sex

"может понадобиться в адресе в поле Location: добавить идентификатор сессии явным образом."
Как это делается?

  Ответить  
 
 автор: Владимир55   (19.01.2009 в 00:16)   письмо автору
 
   для: Владимир55   (18.01.2009 в 23:46)
 

Похоже, что сессия "теряется" вследствие использования конструкции
header('Location: tst.htm'); 
        exit; 


Если вместо неё использовать
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; 
URL=1mj.htm'></HEAD></HTML>";
то тоже не работает.

А при типовой ссылке
echo '<p><a href="1mj.htm">Переход</a></p>';
сессия сохраняется.

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

Как же передать сессию через безусловный переход
header('Location: tst.htm'); 
        exit; 
или
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; 
URL=1mj.htm'></HEAD></HTML>";

  Ответить  
 
 автор: Николай2357   (19.01.2009 в 00:22)   письмо автору
 
   для: Владимир55   (19.01.2009 в 00:16)
 

Я долго и нудно пытался потерять эту переменную. Никак. Все варианты худо бедно работают. Причина где то ещё.

  Ответить  
 
 автор: Владимир55   (19.01.2009 в 00:29)   письмо автору
 
   для: Николай2357   (19.01.2009 в 00:22)
 

Спасибо, Николай!

С рекомендацией Trianon (19.01.2009 в 00:18) всё заработало.

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

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