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

12
big boy
На сайте с 18.11.2006
Offline
354
#11
Ну во-первых act=login - вообще лишнее, все можно и без этого прекрасно сделать

Я бы сделал, да пока не знаю как.

По поводу фильтрации - полностью согласен.

✔ Как я генерирую статьи через ИИ, которые приносят трафик - https://webmasta.ru/blog/16-vkalyvayut-roboty-ne-chelovek-stati-s-pomoschyu-ii-kotorye-prinosyat-trafik
big boy
На сайте с 18.11.2006
Offline
354
#12
Dreammaker:
О других приходящих в админку данных (тексты статей и так далее) нужно беспокоится при выводе (как в админке, так и на самом сайте - чтобы не было XSS всяких) используя htmlspecialchars() и тому подобное.

Да, это я уже реализовал чуть ли не первым делом :)

big boy
На сайте с 18.11.2006
Offline
354
#13

Еще вопрос.

Как после успешной авторизации послать сразу на "index.php?act=home"?

Пробовал так:

Header("Location: index.php?act=home");

Почему-то висит, очень долго думает и в итоге может не загрузиться вообще. Может не так написал?

Dreammaker
На сайте с 20.04.2006
Offline
569
#14

На первый взгляд, вроде бы всё нормально..

попробуйте так:

header("Location: /index.php?act=home");

если не поможет, то пример из мана http://php.net/header с учётом того, что желательно указывать полный адрес (кстати, там много коментариев можно смотреть):


<?php
/* Redirect to a different page in the current directory that was requested */
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>
denis716
На сайте с 12.09.2007
Offline
115
#15
big boy:
Я бы сделал, да пока не знаю как.
По поводу фильтрации - полностью согласен.

Ну примерно так это будет с учетом всех пожеланий:

<?php

session_start();

if (!isset($_SESSION['login'])) {
//если переданы логи и пароль
if(isset($_POST['loginc']) && isset($_POST['passc'])) {
//Подключаем файл в котором хранятся логин и пароль
require_once("pass.php");
//проверяем
if ($_POST['loginc'] == $login && $_POST['passc'] == $pass) {
$_SESSION['login'] = TRUE;
$_SESSION['user'] = $_POST['loginc'];
$_SESSION['start']=time();
} else
//Если логин пароль неверные
{
print "<center><p>Неправильная комбинация. Повторите попытку.</p></center>";
}
}
}

//Проверяем установлена ли админская сессия
if (isset($_SESSION['login'])) {
//а вот без logout не обойтись
if(isset($_GET['act']) && $_GET['act']=='logout') {
unset($_SESSION['login']);
print 'До свидания! <a href="index.php">Войти снова</a>';
} else {
//Здесь идет сама админка.
print "Превед! Йа админко! ";
if (УСЛОВИЕ) {РЕЗУЛЬТАТ}
if (УСЛОВИЕ2) {РЕЗУЛЬТАТ2}
if (УСЛОВИЕ3) {РЕЗУЛЬТАТ3}
if (УСЛОВИЕ4) {РЕЗУЛЬТАТ4}
if (УСЛОВИЕ ...N) {РЕЗУЛЬТАТ ...N}
print '<a href="index.php?act=logout">Выход</a>';
}
} else {
//Если сессия не установлена, то форма входа
print "<form method=post action=index.php>
<input type=text name=loginc size=10> <input type=password name=passc size=10> <input type=submit value=Вход>
</form>";
}
?>

🚬

big boy
На сайте с 18.11.2006
Offline
354
#16

denis716, спасибо большое!

оффтоп: в чем разница между

include();
require();
require_once();

пока не смог найти толкового объяснения...

[Удален]
#17
big boy:
denis716, спасибо большое!

оффтоп: в чем разница между
include();
require();
require_once();

пока не смог найти толкового объяснения...

Существует ещё кстати include_once.

Приставка _once означает, что при подключении будет проверяться наличие подключаемых функций. Нужно для того, чтобы не подключать случайно и по неосторожности дважды одну и ту же функцию. Пример: скрипт1 использует функцию0 и скрипт2 тоже использует функцию0. Как подключить оба скрипта, если функции в них уже прописаны? Можно переименовать функцию, но это не выход. Если их подключать _once, то подключатся скрипт1, скрипт2 и только один вариант функции0. Советую использовать постоянно ;)

include отличается от require только тем, что инклуд подключает скрипт во время выполнения скрипта, а require во время парсинга. Если не ошибаюсь, то конструкция

for($i=0;$i<10;$i++)include('script');
подключит 10 скриптов, а если поставить require, то только один. include работает несколько дольше require и при интепритации в утилите типа php2exe не может работать, т.к. причина уже описана.
DyaDya
На сайте с 11.04.2007
Offline
147
#18
big boy:
Требуется организовать вход в админку с помощью сессий и проверки на логин и пароль.
Проверял на Денвере - все работает, заливаю на хост - работает на половину.
На хосте такая проблема - идентификация проходит успешно, однако при дальнейших действиях выкидывает обратно на форму входа.

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

<?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}
}
?>


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

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

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

Если не умничать, то скажу просто убери в начале кода unset($s); и все должно заработать :)

А в будущем, лучше чтонидь более менее проверенное и надежное использовать для авторизации. Это все-таки один из важных моментов, в котором недолжно быть уязвимостей.

Уже много чего насоветовать успели, советую воспользоваться именно советами других. Я лиш привел решение самое быстрое, с учетом твоего вопроса :).

Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
12

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