Перейти к содержимому

Фотография
- - - - -

Проблемы с сессиями и закрытием доступа


  • Вы не можете создать новую тему
  • Закрытая тема Тема закрыта
Сообщений в теме: 2

#1 Giru

Giru

    Прохожий

    Топикстартер
  • Новичок
  • 0
    1 сообщ.

Отправлено 16 Январь 2018 в 14:59

Добрый день! Перед нами стоит несколько задач. 
1) Чтобы не авторизованный пользователь не мог получить доступ ко внутренней странице.
Т.е. когда не было сессии сессии был закрыт доступ к этой странице kuptso4c.beget.tech/levels и при нажатии кнопки начать срабатывала переадресация на авторизацию kuptso4c.beget.tech/avtorizacziya (это работает), но после успешной авторизации выкидывает на главную главную почему то kuptso4c.beget.tech/(.
2) Так же чтобы нельзя было пройти по прямой ссылке kuptso4c.beget.tech/levels, а в случае если человек пытается перейти по ней то его переадресовывало на главную или на авторизацию. Пытались это сделать но нечего не вышло((
3) Чтобы при нажатии кнопки выход которая находится на внутренней странице kuptso4c.beget.tech/levels сессия прекращалась и переадресовывала на главную kuptso4c.beget.tech/. Сделали снипет, вызвали его в html. так же прилагаю сам снипет

PHP:
<?php
session_start();
session_destroy();
header('Location: /index');
Код (Text):
<div class="inner-people">
                        <li><a href="#" class=""><img src="img/people-icon.png" alt=""></a>
                            <ul class="inner-menu-people">
                                <li><a href="">Мой профиль</a></li>
                                <li><a href="">Мои балы</a></li>
                                <li><a href="">Корзина</a></li>
                                <li><a href="">Блог</a></li>
                                <li><a href="">Мой прогресс</a></li>
                                <li><a href="[[logout?      ]]">Выход</a></li>
                            </ul>
                        </li>
                    </div>
Опыта много не имеем. Сайт работает на MODX, весь PHP код реализуется в снип. Привожу пример кода для авторизации. Там наверняка много ошибок.

PHP:
    <?php
    session_start();
    $login = $_POST['login']; //Написать условия проверки
    if(isset($_POST['password']) && strlen($_POST['password'])>0){
        $password = strip_tags($_POST['password']);
        $password = md5($password);
       
    }
    $whereLog = array(
        'parent'=> 3,
        'description' => $login
        );
    $login = $modx->getObject('modResource', $whereLog);
    if(isset($login)){
       if($password == $login->get('introtext'))
       {
           $id = $login->get('id');
           $_SESSION['id'] = $id;
           session_start();

           $_SESSION['login'] = TRUE;
           header('Location: /');
         
       }
       else
       session_start();

        if (! isset($_SESSION['login']))
        {
           header('Location: /nopass.html');
           return;
       }


    }

    else
    if (! isset($_SESSION['password']))
    {
        header('Location: /nouser.html');
        return;
    }
    return;
Подскажите как решить данные проблемы)
  • 0

Спонсор

#2 BaNru

BaNru

    Пацифизжу

  • суперМодератор
  • 1015
    3 690 сообщ.

Отправлено 17 Январь 2018 в 00:23

1) Большинство сайтов делают по простому - в адрес пишут страницу откуда перекинуло, то есть как-то так
мойсайт.ру/avtorizacziya?redirect=levels
Страница авторизации просто проверяет через $_GET наличие redirect и после успешной авторизации перекидывает на этот редирект
header('Location: /levels');
 
2) проверяйте $_SERVER['referer']
 
3) В коде же уже используется header, продолжайте его использовать для редиректа.
  • 0

#3 miketomlin

miketomlin

    Частый гость

  • Участник
  • 17
    73 сообщ.

Отправлено 21 Январь 2018 в 18:09

Между 1 и 2 никакой разницы нет, т.е. обычно не модифицируют ссылку на закрытую страницу в зависимости от авторизованности, если не брать в расчет такие простые вещи, как вариативность Вход/Выход (хотя конкретно ссылка тут может быть одна и та же, меняется только надпись и действие) и т.п. На защищаемой странице делается редирект на страницу входа с приписыванием «точки возврата» к адресу, как показали выше. Если нужно в точности воссоздать сложный адрес возврата со своей строкой параметров и т.п., можно не GET-параметр использовать, а полностью приписывать адрес: /login/levels/100?page=500. Реферер для этих целей лучше не использовать.
 
Тоже самое можно делать и при выходе, хотя у ТСа задаче проще, т.к. нет общедоступной альтернативы для защищаемой страницы. Основы описаны в моей статье Как сделать авторизацию пользователя? Только не нужно совсем уж опускаться до упрощений, которые я там использовал.


  • 0



Похожие темы Свернуть

Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей