Нужна помощь по сессиям - от А до Я

An27

МАСТЕР
Регистрация
03.07.2010
Сообщения
1,734
Реакции
613
Поинты
43.430
Пишу небольшой проект, нужна помощь по сессиям.
Часть первая:
Главная имеет обычный код, просто форма для авторизации:
PHP:
<html>
<head>
<title>Админка</title>
</head>

<body>

<?
echo '<form action="logh.php" method="post">
Введите логин: <input type="text" name="login"><br>
Ваш пароль: <input type="password" name="pass"><br>
<input type="submit" value="Вход в админку"></form>';

?>

</body>
</html>
Дальше страница logh.php, которая проверяет пароль. Например, логин и пароль admin:
PHP:
<?
session_start();
?>
<html>
<head><meta charset="utf-8"><title>Админка </title>

</head>

<body>
<?
$loger=$_POST['login'];
$para=$_POST['para'];

if ($loger=='admin' && $pass=="admin"){
$_SESSION['Login'] = 'YES';
echo 'что попало';
} else {
$_SESSION['Login']="NO";
echo 'не вошел. закрытая зона. ЧТобы войти <a href="index.php">вернитесь на главную</a>';
}
?>
</body>
</html>
И вот вопросы:
1) правильно ли я делаю session_start(); ?
2) правильный ли алгоритм проверки логина/пароля?

Все работает, но может подскажите на начальном этапе что не так? Спасибо.

p.s. Часть первая, потому что по мере написания проекта вопросы будут возникать и дальше :)
 

teslatoy

Новичок
Регистрация
16.10.2015
Сообщения
43
Реакции
5
Поинты
0.000
Тут походу нет никого...:mad:
 

teslatoy

Новичок
Регистрация
16.10.2015
Сообщения
43
Реакции
5
Поинты
0.000
народ, если кто шарит, помогите пожалуйта советом, застрял:
Проблема: авторизация на сайте срабатывает, перекидывает на поддомен, на нем сессия сохраняется, а на сайте исчезает

.htaccess сайта содержит строки:
RewriteCond %{HTTP_HOST} ^www.site.com
RewriteRule (.*) http://site.com/$1 [R=301,L]
<IfModule mod_rewrite.c>
php_value session.cookie_domain ".site.com"
</IfModule>

.htaccess поддомена содержит строки:
<IfModule mod_php5.c>
RewriteCond %{HTTP_HOST} ^my.site.com
RewriteRule (.*) http://my.site.com/$1 [R=301,L]
</IfModule>
php_value session.cookie_domain ".site.com"

сайт на битриксе, кабинет на поддомене - самописный

в битриксе стоят галки в настройках модулей:
Распространять куки на все домены:
Использовать защищенное хранение авторизации в cookies:
Распространять авторизацию на все домены:

в настройах сайта указаны доменные имена:
site.com
my.site.com
 

dkameleon

МАСТЕР
Регистрация
14.12.2006
Сообщения
4,237
Реакции
3,167
Поинты
0.000
:
1) правильно ли я делаю session_start(); ?
2) правильный ли алгоритм проверки логина/пароля?
1. правильно.
2. неправильно.


Проблема: авторизация на сайте срабатывает, перекидывает на поддомен, на нем сессия сохраняется, а на сайте исчезает
изучите детали самой куки, которая создается.
странно, что битрикс её создает и сам не видит.

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

teslatoy

Новичок
Регистрация
16.10.2015
Сообщения
43
Реакции
5
Поинты
0.000
изучите детали самой куки, которая создается.
странно, что битрикс её создает и сам не видит.

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

Спасибо большое, буду пробовать.:i-yes:
 

An27

МАСТЕР
Регистрация
03.07.2010
Сообщения
1,734
Реакции
613
Поинты
43.430
2. неправильно.
Пускай даже если с базы тяну. Дело не в этом.
А сам алгоритм. Сверяю логин и пароль - и если они совпадают: пускаю, если нет - не пускаю.
Проблема в условии (if ($loger=='admin' && $pass=="admin")) или в $_SESSION['Login']?

Спасибо.
 

An27

МАСТЕР
Регистрация
03.07.2010
Сообщения
1,734
Реакции
613
Поинты
43.430

An27

МАСТЕР
Регистрация
03.07.2010
Сообщения
1,734
Реакции
613
Поинты
43.430

ARRAY97

Новичок
Регистрация
10.12.2012
Сообщения
286
Реакции
124
Поинты
0.000
Не мешало бы проверять POST переменные на isset, на поздних версиях php это уже вроде как обязалово.

- а ещё значение переменной $pass не присвоено, нужно поменять $para=$_POST['para']; на $pass=md5($_POST['para']);

- и конечно пароли лучше хранить в хеше

<?

if (isset($_POST['login']) && isset($_POST['para'])){

$loger=$_POST['login'];
$para=md5($_POST['para']);

if ($loger=='admin' && $pass=="admin"){
$_SESSION['Login'] = 'YES';
echo 'что попало';
} else {
$_SESSION['Login']="NO";
echo 'не вошел. закрытая зона. ЧТобы войти <a href="index.php">вернитесь на главную</a>';
}
}
?>
 
Последнее редактирование:

An27

МАСТЕР
Регистрация
03.07.2010
Сообщения
1,734
Реакции
613
Поинты
43.430
Извините за вопрос, но где должен быть этот код? То есть строка проверки алгоритма? На странице проверки данных логина/пароля, на всех страницах, где есть сессии? И еще, до начала сессий, или после:
Код:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo 'скрытый текст кабинета';
}
 

dkameleon

МАСТЕР
Регистрация
14.12.2006
Сообщения
4,237
Реакции
3,167
Поинты
0.000
PHP:
 <?
session_start();
?>
<html>
<head><meta charset="utf-8"><title>Админка </title>

</head>

<body>
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$loger=$_POST['login'];
$para=$_POST['para'];

if ($loger=='admin' && $pass=="admin"){
$_SESSION['Login'] = 'YES';
echo 'что попало';
} else {
$_SESSION['Login']="NO";
echo 'не вошел. закрытая зона. ЧТобы войти <a href="index.php">вернитесь на главную</a>';
}
}

if ($_SESSION['Login'] == 'YES') {
echo 'здесь выводим админку';
}
?>
</body>
</html>

приблизительно так.
 
  • Like
Реакции: An27

An27

МАСТЕР
Регистрация
03.07.2010
Сообщения
1,734
Реакции
613
Поинты
43.430
Сверху Снизу