Я написал маленький скрипт авторизации. Работает нормально при авторизации входит. Но есть проблема одна когда я перехожу по страницам то меня выкидывает из авторизации и приходится заново авторизоваться. Вот код моего скрипта: login_form.php: PHP: <? session_start(); ini_set('session.auto_start',1); include ("config.php"); if (isset($_POST['action']) AND $_POST['action'] == "submit") { session_register('login'); session_register('passw'); $_SESSION['login'] = $_POST['login']; $_SESSION['passw'] = $_POST['passw']; $_POST['login'] = str_replace('~','',strip_tags(trim ($_POST['login']))); $_POST['passw'] = str_replace('~','',strip_tags(trim ($_POST['passw']))); if (!$_POST['login']) { echo "<center><br>Пожалуйста введите логин</center><br>"; unset ($_POST['sent']); echo $sm; exit;} if (!$_POST['passw']) { echo "<center><br>Пожалуйста введите пароль</center><br>"; unset ($_POST['sent']); echo $sm; exit;} $sql="select login, pass, firstname, email from user where login = '$_POST[login]' and pass = '$_POST[passw]' limit 1"; $result=mysql_query($sql,$db_conn); $row=mysql_fetch_array($result); if ($_POST['login']==$row[login] AND $_POST['passw']==$row[pass]){ $at_login = TRUE; } else { echo "Такого пользователя/пароля в базе нет. Повторите авторизацию<br>"; echo $sm; } } if ($at_login == TRUE){ echo <<<HTML <div align=center> <table width=80% border=0 cellspacing=0 cellpadding=0> <tr> <th scope=col>Привет $_POST[login]</th> </tr> <tr> <td> </td> </tr> <tr> <td>Рады Вас видеть</td> </tr> <tr> <td>$row[firstname]</td> </tr> <tr> <td> </td> </tr> <tr> <td><a href=?do=logout>Выйти</a></td> </tr> </table> </div> HTML; } else { echo <<<HTML <div align=center> <table width=20% border=0 cellspacing=0 cellpadding=0> <form action="" method=post> <input name=action type=hidden value=submit /> <tr> <th colspan=2 scope=col>Войти</th> </tr> <tr> <td><strong>Логин:</strong></td> <td><input type=text name=login maxlength=20></td> </tr> <tr> <td><strong>Пароль:</strong></td> <td> <input type=password name=passw maxlength=25></td> </tr> <tr> <td> <input onclick=submit(); type=submit value=Войти> </td> <td><input type=reset value=Очистить></td> </tr> </form> </table></div> HTML; } ?> config.php: PHP: $db_conn = mysql_connect("localhost", "root", ""); mysql_select_db("lesson", $db_conn); Mysql: PHP: -- -- Структура таблицы `user` -- CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `login` varchar(15) NOT NULL, `pass` varchar(10) NOT NULL, `firstname` varchar(126) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ; ---- Дамп данных таблицы `user` Кто сможет помочь.
У меня php 5 register_globals = On На сайте я в главном шаблоне Подключаю через <? require_once("login_form.php"); ?>
извини, но где в твоем коде прописано, что он должен переносить данные поьзователя по другим страницам? Твой код делает только одно - выполняет залогинивания когда человек ввел логин и пасс и нажал "войти". Чтоб данные сохранялись на всех страницах, тебе нужно записать его логин и пасс в сессию в случае успешной авторизации.
И авторизация кстати говоря дырявая. по адресу login_form.php?at_login=1 будет спокойно пропускать без всякого логина и пасса.
точно не уверен но по поводу во тэтого куска кода... PHP: <? session_start(); ini_set('session.auto_start',1); include ("config.php"); if (isset($_POST['action']) AND $_POST['action'] == "submit") { session_register('login'); session_register('passw'); во первых можно два раза не проверять переменную $_POST['action']. первая isset($_POST['action']) AND здесь не нужна вовсе. зачем она если ты ее проверяешь на конкретное значение? И еще я не уверен но ты точно уверен что ссесия будет работать после инклуда? И вообще 90% что у тебя запарка именно с сессиями...
А не подскажеш как записать в сессию даные после успешной авторизации чтобы на каждой странице видели пользователя?
2Abra, точно ты прав... я после 5 строки даже не посмотрел... 2victorianec, рекомендую вообще почитать про авторизацию и регу... в инете примеров очень много. да и в книгах это часто есть...
При чем здесь база? База и сессии совсе разные вещи... блин ну сходи сюда - http://php.su или сюда - http://forum.vingrad.ru или вот сюда http://phpforum.ru там и примеры есть и учебники и еще всекая бяка что тебе может понадобиться... И зря ты бросаешься что то писать даже не зная как это работает. http://php.ru http://phpclub.ru это вдогонку...
victorianec наглядно твой код авторизации должен выглядеть так: PHP: if ($_POST['action'] == "submit") { //тут мы проверяем введенный логин и пароль. //если они верны, задаем переменную $at_login = TRUE; //потом записываем данные в сессию. $_SESSION['login'] = $_POST['login']; $_SESSION['pass'] = $_POST['pass']; } elseif ($_SESSION['login'] && $_SESSION['pass']) { //сюда вставляем тот же скрипт проверки что был // в первом условии, только к переменной обращаемся // через суперглобальный массив $_SESSION а не $_POST // если все верно, задаем переменную $at_login = TRUE; } if ($at_login == TRUE) { //добро пожаловать пользователь $_SESSION['login'] } и пиши свой код поаккуратнее - он совершенно нечитабелен, поэтому в нем тяжело понять что к чему. и в начале скрипта предопределяй переменную $at_login, или поставь register_globals - off
blaga, исправил уже. мля ну ты не тупо копи-пасть его к себе, а разберись и сделай на подобии. И замени переменные. Я свои писал от балды.
в начале кода session_start(); поставил? и прочти все таки документации по сессиям и всему прочему. Думаю гугл выдаст много полезной информации по запросу "авторизация на php"
У меня в каждом файле прописан вначале session_start(); Вот сайт мой http://lesson9.victorianec.com там авторизация стоит верху
)хм..посмотрел сайтиг, зачем те вообще там авторизация??.. скрипт твой еле читаем..глаза еб**сь пока разбирал, наворотил как-будто сдирал и адаптировал... одно лекартсво юзай гугл, скриптов, решений и подсказок оч много
Сайт тот просто так поставлен для школы ЕШКО отчитываюсь. А авторизацию я просто для себя хочу написать, чтобы потом когда понадобиться вставить его там.
ну так САМ и пиши. Мануалы тебе в руки. тут уже все объяснили более чем подробно. если бы у тебя были хотя бы начальные знания, ты бы уже все давно сделал. Так получи эти начальные знания.