Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не передаются переменные в сессии


Автор: GPolis 1.12.2006, 10:27
Суть проблемы вот в чем:

Есть страница index.php, в которую с помощью include вставлен модуль логина. Модуль логина выводит форму логина, если переменная сессии не определена. Или выводит имя пользователя, если определена. Форма логина отправляет POST-запрос на отдельную страницу логина, которая, собственно, и создает сессию с переменной имени, переадресуя с помощью Header(Location:...) поьзователя обратно на страницу index.php. Все это приведено в приложенном в файле коде.

Результат его работы таков, что index.php видит идентификатор сессии, но не видит переменных сессии. Index.php создает сессию и определяет ее переменные в самом начале. Сделать это в модуле логина проблематично, т.к. до его работы в браузер уже выведена некоторая информация. Однако, несмотря на выскакивающую ошибку в заголовках, переменные все же передаются в этом случае. Возникает вопрос, можно ли вообще использовать такую структуру файлов (главная страница->модуль->компонент) для подобной задачи? Или ошибка настолько глупа ,что я ее просто не вижу?

Код:
index.php
Код

<?php
//Уничтожает сессию
if(@$logout==1){
//session_name('gps');
//session_unset();
session_destroy();
};
//Инициирует сессию

if(IsSet($s_ID)){
session_name('gps');
session_start();
session_register("s_ID","s_login","s_password","s_name");
};

//подсоединяется к базе данных
mysql_connect('localhost','root','');
mysql_select_db('tst');
mysql_error();

//Подгружает шаблоны
?>
<html>
<?
require("templates/header.php"); //Header.php и содержит модуль логина
require("templates/main.php");
require("templates/footer.php");
?>  


mod_login.php
Код

<?php
//Если сессия существует
if(@IsSet($gps)){
  //session_name('gps');
  //session_start();
  //session_register("s_ID","s_login","s_name");
  echo 'Welcome <b>'.$_SESSION['s_name'].'</b><br><a href='.$SCRIPT_NAME.'?logout=1>Logout</a>';  
} else {
    echo '<form action="components/com_login.php" method=post>';
    echo '<input name=login class=inputstyle>';
    echo '<input type=password name=password class=inputstyle>';
    echo '<input type=submit name=lb value=Login class=inputstyle>';
    echo '<br><a href=register.php>Register</a>';
    echo '</form>';
};
?>


com_login.php
Код

<?
//подсоединяется к базе данных
mysql_connect('localhost','root','');
mysql_select_db('tst');
mysql_error();
//проверяет логин и пароль
  $check = mysql_query("select * from `USERS` where `login`='$login' and `password`='$password'");
  $check = mysql_fetch_array($check);
//если логин и пароль совпали
  if(@$check){
    session_name('gps');
    session_start();
    session_register("s_ID","s_login","s_password","s_name");  
    //session_set_cookie_params(time()+3600*24);
    //setcookie(session_name(),session_id(),time()+3600*24);
    $s_login=$login;
    $s_ID=$check['ID'];
    $_SESSION['s_name']=$check['name'];
    //echo $s_name;
    Header("Location: ../index.php?gps=".session_id());
    //create_add_form();
  } else {
    echo "Bad login or password";
    };
?>


Таблица USERS
Код

CREATE TABLE `USERS` (
  `ID` int(11) NOT NULL default '0',
  `login` tinytext collate utf8_bin NOT NULL,
  `password` tinytext collate utf8_bin NOT NULL,
  `name` tinytext collate utf8_bin NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Автор: GPolis 4.12.2006, 16:51
Может, все же кто-то знает ответ? smile 

Автор: XClan 4.12.2006, 17:47
А так не катит?
Код

if(@$check){
$login =@$HTTP_POST_VARS['login '];
$password =@$HTTP_POST_VARS['password '];
....

Автор: GPolis 4.12.2006, 18:16
Не совсем понял, что делать потом с этими переменными. Их ведь как-то нужно передать обратно в mod_login.php, который отображает имя...

В это-то вся и проблема  smile 

Автор: Kefir 6.12.2006, 01:20
1. используй только глобальные переменные
2. лучше перепиши всё на один лад, а то ни черта непонятно - где что и почему (например использование $_SESSION и session_register() одновременно)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)