[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессия не пашет.
Druids
Решил опубликовать всю ошибку в этом посте, чтобы не путать знатоков.

Скрипт авторизации
<?php 
session_start();
require_once ("connect.php");
if (isset($_POST['name']) && isset($_POST['pass']))
{
$name = mysql_real_escape_string($_POST['name']);
$pass = md5($_POST['pass']);

// делаем запрос к БД
// и ищем юзера с таким логином и паролем


$query = "SELECT `id`
FROM `USERS`
WHERE `name`='
{$name}' AND `pass`='{$pass}'
LIMIT 1"
;
$sql = mysql_query($query) or die(mysql_error());

// если такой пользователь нашелся
if (mysql_num_rows($sql) == 1)
{
// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)

$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_name'] = $row['name'];
echo "Авторизация Успешна";

}
else
{
die('Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию.');
}
}

?>

<center>
АВТОРИЗАЦИЯ<br>
<
form action="game.php" method="post">
Имя:<input type="text" name="name" value=""><br>
pass:<input type="password" name="pass"><br>
<
input type="submit" name=‘enter’ value="Войти">
</
form></center>


Этот скрипт на главной страничке.
<?php 
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_id']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$SESSION['name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}
?>


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

if (!isset($_SESSION['user_id']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}




Спустя 3 минуты, 2 секунды (25.07.2011 - 17:04) ADiel написал(а):
Простите за нивный вопрос, но что выдает echo mysql_num_rows($sql) и var_dump($row) ?

Спустя 26 минут, 54 секунды (25.07.2011 - 17:30) Druids написал(а):
1
array(1) { ["id"]=> string(1) "1" }

Прописывал вот в это условие:

    if (mysql_num_rows($sql) == 1) 
{
// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)

$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
echo mysql_num_rows($sql);
echo var_dump($row);
}

Спустя 5 минут, 3 секунды (25.07.2011 - 17:35) m4a1fox написал(а):
Druids
Потому что из БД вот тут

SELECT `id`

Вытаскиваете только id а надо?

Спустя 5 минут, 5 секунд (25.07.2011 - 17:41) Druids написал(а):
Цитата (m4a1fox @ 25.07.2011 - 14:35)
Druids
Потому что из БД вот тут

SELECT `id`

Вытаскиваете только id а надо?

не много не понял вас =( В данном случае 1 id мало будет? что ещё необходимо будет прописать?


<?php
session_start();

if (!isset($_SESSION['user_id']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}

Спустя 1 минута, 14 секунд (25.07.2011 - 17:42) ADiel написал(а):
$row['name']. Вот я и гворю var_dump($row)
Не хотел прямо говорить, пусть человек мозгами шевелит

но id будет достоточно для проверки

Спустя 2 минуты, 50 секунд (25.07.2011 - 17:45) Druids написал(а):
Благодарю =) Весь день промучился. не знал, в чем ошибка =)

Спустя 5 секунд (25.07.2011 - 17:45) m4a1fox написал(а):
Цитата
но id будет достоточно для проверки

Для проверки - вполне!

но скажи Druids, как у тебя это условие выполнится

$_SESSION['user_name'] = $row['name'];

Если ты выбрал только id?

Спустя 46 секунд (25.07.2011 - 17:45) ADiel написал(а):
какое условие? Я вижу присваивание. Масимум выдаст undefined index 'name'
Фишка в том, что действительно какой то глюк.. id он должен сессии присваиваться. МОжет быть где то есть if ($_SESSION['user_id'] = какое то значение?)
Даже не знаю, что еще предположить

Спустя 1 минута, 51 секунда (25.07.2011 - 17:47) Invis1ble написал(а):
Цитата
$SESSION['name']

вот тут тоже ошибка ($_SESSION)

Спустя 1 минута, 5 секунд (25.07.2011 - 17:48) ADiel написал(а):
Ну не влияет это на user_id! Тут что то другое, таинственное =)

Спустя 2 минуты, 13 секунд (25.07.2011 - 17:51) Invis1ble написал(а):
Собственно, нужно определить:
1. Выполняется ли блок:
Цитата
if (mysql_num_rows($sql) == 1)
{
// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)

$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
  $_SESSION['user_name'] = $row['name'];
  echo "Авторизация Успешна";

}

?
2. Выполняется ли блок:
Цитата
else
{
echo "Вы авторизованы как" .$SESSION['name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}

?

Спустя 1 минута, 39 секунд (25.07.2011 - 17:52) Invis1ble написал(а):
У меня подозрение, что все работает, но "ошибка" в $SESSION['name'], поэтому ТС думает, что в сессию не пишутся данные smile.gif
При этом, естественно, нужно еще записать при авторизации имя юзверя, выбрав его из БД

Спустя 46 секунд (25.07.2011 - 17:53) Druids написал(а):
дабы вас ен смущать и самого себя...
$_SESSION['user_name'] = $row['name']; -убрал эту строчку.

Не поработало, ссылался не на ту страничку.

Спустя 1 минута, 10 секунд (25.07.2011 - 17:54) Invis1ble написал(а):
Druids
Я ж говорю, напиши какие блоки выполняются.

Спустя 4 минуты, 30 секунд (25.07.2011 - 17:59) Invis1ble написал(а):
Свернутый текст
<?php 
session_start();
require_once ("connect.php");
if (isset($_POST['name'], $_POST['pass']))
{
$name = mysql_real_escape_string($_POST['name']);
$pass = md5($_POST['pass']);

// делаем запрос к БД
// и ищем юзера с таким логином и паролем


$query = "SELECT COUNT(`id`)
FROM `USERS`
WHERE `name`='
{$name}' AND `pass`='{$pass}'
LIMIT 1"
;
$sql = mysql_query($query) or die(mysql_error());

// если такой пользователь нашелся
if (mysql_result($sql, 0))
{
$_SESSION['user_name'] = $_POST['name'];
echo "Авторизация Успешна";

}
else
{
die('Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию.');
}
}

?>

<center>
АВТОРИЗАЦИЯ<br>
<
form action="game.php" method="post">
Имя:<input type="text" name="name" value=""><br>
pass:<input type="password" name="pass"><br>
<
input type="submit" name=‘enter’ value="Войти">
</
form></center>

Свернутый текст
<?php 
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_name']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$_SESSION['user_name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}
?>

Спустя 43 секунды (25.07.2011 - 17:59) m4a1fox написал(а):
Тупичок????

Спустя 2 минуты, 45 секунд (25.07.2011 - 18:02) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 14:59)
Свернутый текст
<?php 
session_start();
require_once ("connect.php");
if (isset($_POST['name'], $_POST['pass']))
{
$name = mysql_real_escape_string($_POST['name']);
$pass = md5($_POST['pass']);

// делаем запрос к БД
// и ищем юзера с таким логином и паролем


$query = "SELECT COUNT(`id`)
FROM `USERS`
WHERE `name`='
{$name}' AND `pass`='{$pass}'
LIMIT 1"
;
$sql = mysql_query($query) or die(mysql_error());

// если такой пользователь нашелся
if (mysql_result($sql, 0))
{
$_SESSION['user_name'] = $_POST['name'];
echo "Авторизация Успешна";

}
else
{
die('Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию.');
}
}

?>

<center>
АВТОРИЗАЦИЯ<br>
<
form action="game.php" method="post">
Имя:<input type="text" name="name" value=""><br>
pass:<input type="password" name="pass"><br>
<
input type="submit" name=‘enter’ value="Войти">
</
form></center>

Свернутый текст
<?php 
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_name']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$_SESSION['user_name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}
?>

Не выполняется, таже самая реакция =(

Спустя 2 минуты, 52 секунды (25.07.2011 - 18:05) Invis1ble написал(а):
Druids
Хм... А пишет "Авторизация Успешна" ?

Спустя 1 минута, 46 секунд (25.07.2011 - 18:07) ADiel написал(а):
Хах, а если в бд неверный хеш? =)) ИЛи размер поля с паролем на несколько символов меньше?

Спустя 6 секунд (25.07.2011 - 18:07) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 15:05)
Druids
Хм... А пишет "Авторизация Успешна" ?

Да. Выводит надпись, если убрать из формы action

Спустя 1 минута, 46 секунд (25.07.2011 - 18:09) m4a1fox написал(а):
Может просто не правильно данные ТС вводит в форму?

Спустя 32 секунды (25.07.2011 - 18:09) Invis1ble написал(а):
Druids
А ты до этого писал скрипты, использующие сессии? Т.е. сами сессии в принципе работают?

Спустя 13 секунд (25.07.2011 - 18:09) m4a1fox написал(а):
А если action пустым оставить?

Спустя 3 минуты, 37 секунд (25.07.2011 - 18:13) Druids написал(а):
А теперь самое интересное. Зашёл в базу, поставил на дилну пароля не 32 символа, а 64, ну так ради интереса, регнул нового пользователя с таким же паролем как и а старом. зашёл под ним - всё удачно. Далее вышел - зашёл под старым пользователем и тоже удачно. что произошло я не понял.. пароли в базе до и после изменения кол-ва символов - не изменились.

По идеи 32 символа должно было хватить?

Спустя 1 минута, 33 секунды (25.07.2011 - 18:15) Invis1ble написал(а):
Druids
Цитата
Зашёл в базу, поставил на дилну пароля не 32 символа, а 64

а смысл? md5-хэш имеет длину 32.
ты не ответил на вопрос по поводу работы сессий вообще.

Спустя 1 минута, 14 секунд (25.07.2011 - 18:16) Druids написал(а):
УРА, Нашёл. action - надо было делать пустым =)

Спустя 1 минута, 29 секунд (25.07.2011 - 18:17) m4a1fox написал(а):
Пожалуйста!

Спустя 9 секунд (25.07.2011 - 18:17) Invis1ble написал(а):
Druids
а причем тут action ? ты же пишешь, что пишет "Авторизация успешна"....
Вобщем совет - пиши неработающие скрипты как есть, а не выдумывай сферические в вакууме smile.gif

Спустя 54 секунды (25.07.2011 - 18:18) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 15:15)
Druids
Цитата
Зашёл в базу, поставил на дилну пароля не 32 символа, а 64

а смысл? md5-хэш имеет длину 32.
ты не ответил на вопрос по поводу работы сессий вообще.

Писал, почти такой-же тоже тут на форуме спрашивал. Ошибка была тогда в длине у меня 16 стояла а надо было 32... Сейчас того скрипта нет на компе =(

Спустя 1 минута, 23 секунды (25.07.2011 - 18:20) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 15:17)
Druids
а причем тут action ? ты же пишешь, что пишет "Авторизация успешна"....
Вобщем совет - пиши неработающие скрипты как есть, а не выдумывай сферические в вакууме smile.gif

Честно, сам не понял =)

Спустя 29 секунд (25.07.2011 - 18:20) Invis1ble написал(а):
Druids
Цитата
Сейчас того скрипта нет на компе =(

Я помню этот топик wink.gif

Спустя 47 секунд (25.07.2011 - 18:21) Invis1ble написал(а):
Druids
Цитата
Честно, сам не понял

зато я понял, ты привел видоизмененный скрипт, т.е. не такой, как есть на самом деле wink.gif

Спустя 3 минуты, 24 секунды (25.07.2011 - 18:24) m4a1fox написал(а):
Цитата
Честно, сам не понял =)

А я говорю - незачто! biggrin.gif

Спустя 10 часов, 29 минут, 7 секунд (26.07.2011 - 04:54) Druids написал(а):
<?php 
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_name']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$_SESSION['user_name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}
?>


как вот сюда дописать проверку пользователя на права?
в Базе есть поле role имеющее всего 2 значения, Admin или user. Как такое реализовать. Скажем мы уже авторизовались, и на страничке делается проверка - если права Админа, то выводим форму, если мы юзер, то выводим просто текст.

Спустя 8 часов, 25 минут, 3 секунды (26.07.2011 - 13:19) Winston написал(а):
Ну примерно так
Свернутый текст
<?php
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_name']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$_SESSION['user_name']."<br>";
echo "<a href='logout.php'>Выход</a>";
$result = mysql_fetch_assoc(mysql_query("SELECT `role` FROM `имя_таблицы` WHERE `user_name` = '" . $_SESSION['user_name'] . "'"));
if($result['role'] == 'admin')
{
//виводим форму
}
elseif($result['role'] == 'user')
{
//виводим текст
}
}

?>

Спустя 13 дней, 1 час, 25 минут, 58 секунд (9.08.2011 - 14:45) HAKIM написал(а):
 $query = "SELECT `id`
FROM `USERS`
WHERE `name`='
{$name}' AND `pass`='{$pass}'
LIMIT 1"
;

Вставь ещё name и не парся

$query = "SELECT `id`, `name`
FROM `USERS`
WHERE `name`='
{$name}' AND `pass`='{$pass}'
LIMIT 1"
;

Спустя 3 минуты, 40 секунд (9.08.2011 - 14:48) HAKIM написал(а):
эмм дату не глянул(( сори офф
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.