Суть проблемы вот в чем:
Есть страница 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;
|
|