|
 2.6 Кб |
|
| здравствуйте!
Пишу авторизацию на сайте, но после того, как он пишет что авторизировался успешно, стоит нажать F5 и вся авторизация канет в лето, переменная $_SESSION['user'] пишет вместо значения, это - "Array".
Основная страница "закрытой" части:
<?php
session_start();
//если только авторизируемся то вставляем 1, если уже авторизировались то 2
if($mod == "enter")
{ include "enter.php"; } else { include "header.php"; }
?>
|
Файл enter.php прикреплён в атачмент!
Файл headler.php:
<?php
$q_enter = mysql_query("SELECT * FROM user WHERE mail='".$_SESSION['user']."' AND pass='".$_SESSION['pass']."' LIMIT 1");
if(!$q_enter)
{ echo mysql_error(); die; }
if(mysql_num_rows($q_enter)>0)
{
$auto = true;
} else
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='5; URL=../index.php'>
</HEAD>";
echo 'Ошибка авторизации!>';
die;
}
?>
|
После того, как я прощел авторизацию, меня перекидывает на простую index.php, где если перейти по ссылки типа index.php?mod=faq ИЛИ нажать F5 выскакивает ошибка авторизации и просит перезайти! | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 18:42)
| | А где у вас $_SESSION['user'] принимает какое нибудь значение?
один файл
<?php
session_start(); // запускаем сессию
$_SESSION['user']=1;
?>
|
другой файл
<?php
session_start(); // запускаем сессию
echo $_SESSION['user']; // смотрим, что было записано на предыдущей странице
?>
|
| |
|
|
|
|
|
|
|
для: Рома
(23.07.2009 в 20:04)
| | В прикреплённом файле есть строчки
if(mysql_num_rows($q_enter)>0)
{
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
|
Но как только вместо enter.php прикрепляется header.php значение пропадают! Но они заданы 1 секунду назад, куда они деваются, причем девается именно $_SESSION['user'], пишет вместо значения = Array
У меня нет другого файла, всё выполняется в одном index.php, может в этом дело?? | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 20:27)
| | На остальных страницах тоже необходимо вызывать session_start(), иначе переменные $_SESSION['user'] и $_SESSION['pass'] не находятся.
<?php
session_start();
$q_enter = mysql_query("SELECT * FROM user WHERE mail='".$_SESSION['user']."' AND pass='".$_SESSION['pass']."' LIMIT 1");
if(!$q_enter)
{ echo mysql_error(); die; }
if(mysql_num_rows($q_enter)>0)
{
$auto = true;
} else
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='5; URL=../index.php'>
</HEAD>";
echo 'Ошибка авторизации!>';
die;
}
?>
|
| |
|
|
|
|
|
|
|
для: Kaje
(23.07.2009 в 20:56)
| | У меня всего 1 страница index.php, и два include файла: enter.php(он прикреплён) и header.php
Первый авторизирует в самом начале и присваивает данные переменным user и pass!
Второй вызывается в любой другой случай! Причём авторизация проходит на 100% ровно, а вот header.php вызывается только 1 раз, сразу после enter.php верно, в след. раз он выдаёт, что вы не авторизированны, т.е. теряются user и pass переменные!
Грубо говоря, авторизируюсь, попадаю под своим логином на index.php жму F5 и уже не авторизирован! В этом весь трабл!=( | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 18:42)
| |
$q_enter = mysql_query("SELECT * FROM user WHERE mail='".$_SESSION['user']."' AND pass='".$_SESSION['pass']."' LIMIT 1");
|
Внимание.
Очередной лох пытается аутентифицировать не клиента, а сессионный механизм php. | |
|
|
|
|
|
|
|
для: Trianon
(23.07.2009 в 21:15)
| | >Внимание.
>Очередной лох пытается аутентифицировать не клиента, а сессионный механизм php.
Вы, товарищ, поосторожней с выражениями, тут форум, где спрашивают совет! А вот с такими выражениями да к незнакомым людям...чести вам не делает. | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 21:38)
| | Умейте извлекать нужное.
Ключевое слово очередной, задайте правильные вопросы и этот товарищ поможет Вам
кстати код Вы сами писали? | |
|
|
|
|
|
|
|
для: Valick
(23.07.2009 в 21:46)
| | Код в самом начале был такой, но он меня очень смущал:
mysql_query("SELECT pass='".$_POST['pass']."' FROM user WHERE mail='".$_POST['user']."' LIMIT 1");
|
Всё остальное взято из учебника(Самоучитель PHP 5) авторов этого сайта!
Хорошо, как тогда правильно задать запрос к базе?
Ещё подсмотрел код тут - http://www.codenet.ru/webmast/php/PHP-Sessions.php! | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 21:50)
| | несколько неудачный пример
Зачем в protected.php снова обращаться в БД непонятно ("маслянное масло" получилось) и как сказал, Трианон, идентифицировать не клиента (как в первом файле) а уже сессию.
Вот и всплыл тот лох ;) | |
|
|
|
|
|
|
|
для: Valick
(23.07.2009 в 22:28)
| | Вот этого я и не понял, а как эту сессию идентифицировать??? создовать отдельную таблицу с id сессиями чтоли? | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 22:35)
| | НЕТ!!!!)))
к базе вообще не нужно обращаться второй раз, и уж точно не нужна вторая таблица.
Просто проверяете установлена ли идентифицирующая переменная сессии и всё. | |
|
|
|
|
|
|
|
для: Valick
(23.07.2009 в 22:40)
| | типа при первом входе сделать переменную $_SESSION['in'] = true; и только её потом проверять??? | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 22:44)
| | угу | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 22:44)
| | Вот почитайте сначала эту
статья
потом эти при желании
тема
тема
тема
тема | |
|
|
|
|
|
|
|
для: OneArt
(23.07.2009 в 22:35)
| | Пользователь ввел логин и пароль, вы проверяете (логин и пароль) в базе на наличие таковых. Если такой логин в базе есть, запускаете для этого пользователя хотя бы пару сессий. На всех остальных страницах, где требуется авторизация, вы просто проверяете существование сессий через isset. Все. Для начала. | |
|
|
|
|
|
|
|
для: Рома
(23.07.2009 в 22:44)
| | хотя бы пару сессий
это зачем? | |
|
|
|
|
|
|
|
для: Valick
(23.07.2009 в 22:47)
| | Ну логин и какой нибудь ключ ему соответствующий. Уже пара. | |
|
|
|
|
|
|
|
для: Рома
(23.07.2009 в 22:53)
| | ну так пару переменных сессии, а не пару сессий
разница большая | |
|
|
|
|
|
|
|
для: Valick
(23.07.2009 в 22:56)
| | Можно поподробнее, для непросвященных, в чем эта разница? | |
|
|
|
|
|
|
|
для: Рома
(23.07.2009 в 23:05)
| | >Можно поподробнее, для непросвященных, в чем эта разница?
Что такое сессия?
Отдельный вопрос для Вас лично.
Если Вы считаете себя непосвященным в некоторой тематике, Вас не корежит давать советы в ней?
И если нет, то почему? | |
|
|
|
|
|
|
|
для: Trianon
(23.07.2009 в 23:14)
| | >Что такое сессия?
Сессия это встроенный механизм для того, чтобы различать разных посетителей сайта.
>Отдельный вопрос для Вас лично.
>Если Вы считаете себя непосвященным в некоторой тематике, Вас не корежит давать советы в ней?
>И если нет, то почему?
В разговоре рождается истина. Если кто-то поправит - буду только рад узнать, что где то ошибался. | |
|
|
|
|
|
|
|
для: Рома
(23.07.2009 в 23:31)
| | >>Что такое сессия?
>Сессия это встроенный механизм для того, чтобы различать разных посетителей сайта.
Это сессионный механизм - это самое оно.
А сессия - это набор переменных, связанных этим механизмом с помощью идентификатора, передаваемого посредством одного из параметорв от клиента к серверу, и сохраняемых на сервере между процессами выполнения скриптов.
Но даже если сессия это механизм, то как её можно спутать с переменной?!
>
>>Отдельный вопрос для Вас лично.
>>Если Вы считаете себя непосвященным в некоторой тематике, Вас не корежит давать советы в ней?
>>И если нет, то почему?
>В разговоре рождается истина. Если кто-то поправит - буду только рад узнать, что где то ошибался.
Так может сперва родить, потом советовать как? | |
|
|
|
|
|
|
|
для: Рома
(23.07.2009 в 22:53)
| | Зачем ключ держать в сессии? | |
|
|
|
|
|
|
|
для: Trianon
(23.07.2009 в 23:13)
| | да, тут я обломался. | |
|
|
|
|
|
|
|
для: Рома
(23.07.2009 в 22:44)
| | >>>вы просто проверяете существование сессий через isset
Что такое isset я знаю, а как вот проверить целую сессию не догадываюсь! Мы же её сначала создаём( session_start() ) а потом если проверить, то точно она будет существовать! | |
|
|
|