Проблема с сессиями!

12
big boy
На сайте с 18.11.2006
Offline
324
1069

Требуется организовать вход в админку с помощью сессий и проверки на логин и пароль.

Проверял на Денвере - все работает, заливаю на хост - работает на половину.

На хосте такая проблема - идентификация проходит успешно, однако при дальнейших действиях выкидывает обратно на форму входа.

Вот кусок кода:

<?php

unset($s);
session_start();

if (!isset($s['login'])) {
//Форма входа
print "<form method=post action=index.php?act=login>
<input type=text name=loginc size=10> <input type=password name=passc size=10> <input type=submit value=Вход>
</form>";
}
if ($_GET['act'] == "login") {
//Подключаем файл в котором хранятся логин и пароль
require_once("pass.php");

if ($_POST['loginc'] == $login && $_POST['passc'] == $pass) {

$s['login'] = TRUE;
$s['user'] = $_POST['loginс'];
$s['start']=time();
session_register("s");
}
//Если логин пароль неверные
if ($s['login'] == "") {
print "<center><p>Неправильная комбинация. Повторите попытку.</p></center>";
}
}

if ($s['login'] == TRUE) {
//Здесь идет сама админка.
print "Привет!";
if (УСЛОВИЕ) {РЕЗУЛЬТАТ}
if (УСЛОВИЕ2) {РЕЗУЛЬТАТ2}
if (УСЛОВИЕ3) {РЕЗУЛЬТАТ3}
if (УСЛОВИЕ4) {РЕЗУЛЬТАТ4}
if (УСЛОВИЕ ...N) {РЕЗУЛЬТАТ ...N}
}
?>

Привет! я вижу, а при выборе других действий (условий) - выкидывает обратно на форму входа.

Что делать не пойму. Может потому, что уже поздно - башка не работает, спать хочется.

Подскажите пожалуйста.

✔ Как я генерирую статьи через ИИ, которые приносят трафик - https://webmasta.ru/blog/16-vkalyvayut-roboty-ne-chelovek-stati-s-pomoschyu-ii-kotorye-prinosyat-trafik
big boy
На сайте с 18.11.2006
Offline
324
#1

и еще момент - после входа форма не исчезает как положено, а остается.

я бы и сам догадался, как что сделать, однако не уверен сколько это у меня времени займет. Хочется все таки более квалифицированной помощи со стороны ;)

denis716
На сайте с 12.09.2007
Offline
115
#2

Я бы в данном примере не стал пользоваться глобальной переменной, и поменял бы $s на $_SESSION

Соответственно после этого можно убрать session_register("s"); и unset($s);

S
На сайте с 13.07.2007
Offline
56
#3

function auth_user($user_login, $user_password)

{

include 'config_syte.php';

$user_login = mysql_escape_string($user_login);

$user_password = mysql_escape_string($user_password);

$base_connect = mysql_connect($conf['dbhost'], $conf['dbuname'], $conf['dbpass']) or die('Невозможно подключиться.');

@mysql_select_db($conf['dbname'], $base_connect) or die('Невозможно подключиться к базе.');

$query = "select id_user, passw from " . $conf['dbname'] . ".users where login = '$user_login'";

$auth = mysql_query($query, $base_connect) or die('Невозможно выполнить запрос.');

if(mysql_num_rows($auth)>0)

{

while ($user_id = mysql_fetch_assoc($auth))

{

if(crypt($user_password, $user_id['passw']) == $user_id['passw'])

{

$_SESSION['user_auth'] = 'true';

$_SESSION['user_id'] = $user_id['id_user'];

return 1;

}

}

}

else

{

return 0;

}

mysql_close($base_connect);

}

Что-то типо такого.

big boy
На сайте с 18.11.2006
Offline
324
#4

denis716, спасибо, обязательно учту!

т.е. теперь для регистраци переменной надо использовать $_SESSION['переменная'] - так?

solnikolay, спасибо за пример, однако я использую файлы в этом скрипте в качестве баз данных.

denis716
На сайте с 12.09.2007
Offline
115
#5
big boy:
denis716, спасибо, обязательно учту!
т.е. теперь для регистраци переменной надо использовать $_SESSION['переменная'] - так?

Так, и вообще логика скрипта какая то неправильная... корректней так:

<?php

session_start();

if ($_GET['act'] == "login") {
//Подключаем файл в котором хранятся логин и пароль

require_once("pass.php");

if ($_POST['loginc'] == $login && $_POST['passc'] == $pass) {

$_SESSION['login'] = TRUE;
$_SESSION['user'] = $_POST['loginс'];
$_SESSION['start']=time();
} else
//Если логин пароль неверные
{
print "<center><p>Неправильная комбинация. Повторите попытку.</p></center>";
}
}

//Если не установлен логин
if (!isset($_SESSION['login'])) {
//Форма входа
print "<form method=post action=index.php?act=login>
<input type=text name=loginc size=10> <input type=password name=passc size=10> <input type=submit value=Вход>
</form>";
}

if ($SESSION['login'] == TRUE) {
//Здесь идет сама админка.
print "Привет!";
if (УСЛОВИЕ) {РЕЗУЛЬТАТ}
if (УСЛОВИЕ2) {РЕЗУЛЬТАТ2}
if (УСЛОВИЕ3) {РЕЗУЛЬТАТ3}
if (УСЛОВИЕ4) {РЕЗУЛЬТАТ4}
if (УСЛОВИЕ ...N) {РЕЗУЛЬТАТ ...N}
}
?>
HC
На сайте с 24.05.2006
Offline
46
#6

denis716,

а Вы уверены, что у Вас в $_GET и $_POST будут ожидаемые данные? Если не будут - посыпятся варнинги, не забывайте проверять на наличие элемента массива через isset().

Система управления сайтом HostCMS (http://www.HostCMS.ru) - многосайтовость, множество модулей, обмен с 1С, бесплатная версия. Скидка 40% на систему управления для дилеров (http://www.hostcms.ru/partners/partnership/) и 20% для партнеров-фрилансеров (http://www.hostcms.ru/partners/freelance/).
denis716
На сайте с 12.09.2007
Offline
115
#7

Ну я немного всего-лишь подкорректировал логику, в том плане чтобы форма выводилась всегда - зашел человек первый раз или неправильно ввел пароль, также в первоначальном варианте строка

print "<center><p>Неправильная комбинация. Повторите попытку.</p></center>";

на мой взгляд не показалась бы никогда :)

А так конечно скрипт переписать надо весь ;)

big boy
На сайте с 18.11.2006
Offline
324
#8

2 HostCMS

не забывайте проверять на наличие элемента массива через isset()

добавил, спасибо за подсказку!

denis716, спасибо! теперь работает как надо! =)

А так конечно скрипт переписать надо весь

А что в нем не так?

denis716
На сайте с 12.09.2007
Offline
115
#9
big boy:
2 HostCMS

добавил, спасибо за подсказку!

denis716, спасибо! теперь работает как надо! =)


А что в нем не так?

Ну во-первых act=login - вообще лишнее, все можно и без этого прекрасно сделать, во-вторых все данные приходящие извне нужно строго фильтровать в целях безопасности например так:


if (eregi("^[a-zA-Z0-9\-_]*$", $_POST['loginc']) && eregi("^[a-zA-Z0-9\-_]*$",$_POST['passc']))
{ $login=$_POST['loginc']; $password=$_POST['passc']; }
Dreammaker
На сайте с 20.04.2006
Offline
569
#10
denis716:
if (eregi("^[a-zA-Z0-9\-_]*$", $_POST['loginc']) && eregi("^[a-zA-Z0-9\-_]*$",$_POST['passc']))
{ $login=$_POST['loginc']; $password=$_POST['passc']; }

В данном случае (так как, без MySQL работаем) фильтрация особо ничего не даст. Разве что можно обрезать входящие данные до приемлимого размера, да и то это здесь постольку-поскольку нужно :)

О других приходящих в админку данных (тексты статей и так далее) нужно беспокоится при выводе (как в админке, так и на самом сайте - чтобы не было XSS всяких) используя htmlspecialchars() и тому подобное.

Это касается и данных, которые положили в сессию: например, можно вывести Здравствуй, Админ, где Админ из сессии выводится. Здесь особо не важно ибо плохое значение не запишется (сессия стартует после проверки имени), но другие значения из сессии нужно обрабатывать дифлофосом :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий