Проблема с сессиями после переадрессации

STRELOK

Новичок
Проблема с сессиями после переадрессации

В общем такая проблема. Есть страничка с формой. Форма постом отправляет данные в обработчик, он создает переменную в сессии. Дальше идет header("Location: ...", так вот, в том скрипте куда прошло перенаправление, переменной в сессии нету. Появляется она только если нажать на кнопку "обновить" в браузере. Что делать?

Пишу свою кмс, написал сам шаблонизатор, всякие там компоненты и модули. Сейчас занялся созданием процесса регистрации, и тут столкнулся с данной проблемой. Очень сильно надеюсь на помощь.

Как пробовал:
по способу шаблонизатора:
PHP:
$this -> wse -> tpl -> AddValue("reftime", 0);
$this -> wse -> tpl -> AddValue("refurl", "http://strelok-userbar.net/user/register.html");
$this -> wse -> tpl -> EchoTemplateQuick("refresh_page");
по способу хидера:
PHP:
header("Location: index.php?SESSID=".session_id()."&action=module&request=user/register.html");
В обоих случаях, сессия появляется также после перезагрузки. Во втором случае, к тому же еще меняется адресная строка с красивого ЧПУ на безобразную.

На всякий случай:
1) http://site.net/user/register.html (Тут если нет сессии выводиться первый шаг, т.е. принятие пользовательского соглашения)
2) Форма отправляет: index.php?action=register&steep=1&iaccept=on
3) Скрипт если accept=on, ставит $_SESSION["register_steep_fin"] = true
И переадресовывает обратно, на http://site.net/user/register.html
4) Там скрипт смотрит, ога, шаг номер 1 и он завершен, значит переходим к шагу два
5) шаги с 2 по 4 делаются нное количество раз, пока не будут пройдены все шаги. Потом все сессионые переменные регистрации будут уничтожены.

По рекомндациям форума, указываю:
PHP Version - 5.2.4
System - Windows NT VIRUS-ПК 6.1 build 7057
Build Date - Aug 30 2007 07:05:48
Configure Command - cscript /nologo configure.js "--enable-snapshot-build" "--with-gd=shared"
Server API - Apache 2.0 Handler
register_globals - Off Off
 

STRELOK

Новичок
Автор оригинала: Beavis
STRELOK
а зачем ты id сессии через URL передаешь?
Посоветовали так, пробовал (в самом начале) просто переадресовывать на http://site.net/user/register.html тоже, не работает.
 

Фанат

oncle terrible
Команда форума
Ловлю себя на том, что за правильное написание "в общем" я готов простить человеку любые косяки с РНР.

STRELOK, ну проблема явно где-то в коде.
Надо отлаживать. Упрощать код до момента, коггда все заработает.
Рентген таким образом открыл свои лучи - убирал по одному реактиву из шкафа с фотопластинкой, до тех пор, пока она не перестала засвечиваться. Работа программиста сильно похожа на его.
 

Фанат

oncle terrible
Команда форума
С упрощения.
Хотя, как я понимаю, тут столько всего наворочено, что не знаешь, за что хвататься.

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

STRELOK

Новичок
Автор оригинала: *****
С упрощения.
Хотя, как я понимаю, тут столько всего наворочено, что не знаешь, за что хвататься.

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

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

Фанат

oncle terrible
Команда форума
к тому же еще меняется адресная строка с красивого ЧПУ на безобразную.
не очень понятен этот момент.
что есть красивое, а что - безобразное. можно пример?

index.php?SESSID=АААААААААААААААААААААА&action=module&request=user/register.html - это красивое или безобразное?
 

STRELOK

Новичок
Автор оригинала: *****
не очень понятен этот момент.
что есть красивое, а что - безобразное. можно пример?

index.php?SESSID=".session_id()."&action=module&request=user/register.html - это красивое или безобразное?
безобразное =) Красивое - www.site.net/user/register.html.

.htaccess
PHP:
RewriteEngine On  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ /index.php?action=module&request=$1 [L]
 

Фанат

oncle terrible
Команда форума
странно.
то есть, после отправки на адрес
index.php?SESSID=АААААААААААААААААААААА&action=module&request=user/register.html
в адресной строке остается http://www.site.net/user/register.html ?
и только после обновления повляется тот адрес, который ждали?
 

STRELOK

Новичок
Автор оригинала: *****
странно.
то есть, после отправки на адрес
index.php?SESSID=АААААААААААААААААААААА&action=module&request=user/register.html
в адресной строке остается http://www.site.net/user/register.html ?
и только после обновления повляется тот адрес, который ждали?
нет=)
index.php?SESSID=АААААААААААААААААААААА&action=module&request=user/register.html
это и остается =)
 

Фанат

oncle terrible
Команда форума
я не пойму тогда, в чем вопрос
отправляем браузер на адрес index.php?SESSID=АААААААААААААААААААААА&action=module&request=user/register.html
и удивляемся, адрес у нас стал именно таким?
 

STRELOK

Новичок
нет, вопрос в обще не в этом.... Сессия теряется...

НО:
PHP:
<?php
 session_start();
 
 $action = $_REQUEST["action"];
 
 switch ($action)
  {
	  case "set_value":
	   {
		   $_SESSION["test_var"] = $_REQUEST["value"];
		   header("Location: " . $_SERVER['HTTP_REFERER']);
		   exit;
	   }
	  
	  default:
	   {
		   $value = $_SESSION["test_var"];
	   }
  }
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Документ без названия</title>
</head>
<body>
Значение переменной = "<?php echo $value ?>"
<form action="http://session_test/" method="post">
 <input name="action" type="hidden" value="set_value" />
 <input name="value" type="text" />
 <input name="" type="submit" />
</form>
</body>
</html>
Работает...

Х.З. Как искать сбой в движке моем...
 

dimagolov

Новичок
дело должно быть в домене/субдомене.

вопрос. тестируешь через localhost, или у есть имя у хоста?
 

STRELOK

Новичок
на локальном, плюс создаю доменное имя.
C:\WebServers\home\session_test\www вот так скажем.

Юзаю денвер.
 

dimagolov

Новичок
вот и посмотри на какой домен ставится сессионная кука, а на какой происходит переадресация
 

STRELOK

Новичок
Хм, ребята, вы не поверите, ошибка была тут:

PHP:
 function session_def($name, $def)
  {
	  if (isset($_SESSION[$name]))
	   {
		   return $_SESSION[$name];
	   }
	  else
	   {
		   return $def;
	   }
  }
Эта функция находиться в:wse_functions.php, почему не работает, я понять не могу. Ну и ладно, обошелся без нее и сразу заработало.

index.php:
PHP:
<?php 
session_name('WebSiteEngine');
session_start ();
ob_start ();

define ('WebSiteEngine', true);

define ('ROOT_DIR', dirname ( __FILE__ ));
define ('ENGINE_DIR', ROOT_DIR . '/engine');

require_once(ENGINE_DIR . '/wse_classes.php'); 

require_once(ENGINE_DIR . '/wse_config.php'); 
require_once(ENGINE_DIR . '/wse_engine.php'); 

$time = new TTimeMetr();
$time -> Start();

$wse = new WebSiteEngine();

require_once(API_DIR . '/wse_functions.php');

$wse -> Run();

$phptime = $time -> Stop();

$wse -> source -> php_time = $phptime; 
$wse -> source -> db_time = $wse -> db -> QueryTime; 
$wse -> source -> db_queries = $wse -> db -> QueryCount;

$wse -> source -> Out();
?>
 
Сверху