[Помогите] переход только с определенной страницы

Тема в разделе "OpenCart", создана пользователем GrblFF, 20 ноя 2015.

  1. GrblFF

    GrblFF

    Регистрация:
    10 мар 2014
    Сообщения:
    66
    Симпатии:
    1
    Здравствуйте. Подскажите, как можно сделать переход на страницу регистрации только по ссылке с другой страницы. То есть по прямому url /greate-account страница не будет доступна, только со страницы /confirm . Пытался сделать через сессию, но что то не получается. Есть примеры которые подключаются на самой страницы, но в нашем случае сессия открывается в корне из index.php . Пробовал добавлять проверку в контроллере, выпадает с ошибкой.
     
  2. VaLeXaR

    VaLeXaR

    Регистрация:
    24 мар 2015
    Сообщения:
    61
    Симпатии:
    86
    Ну тут можно использовать HTTP_REFERER из $_SERVER. Правда не все браузеры разрешают его посмотреть. Еще как вариант, передавать в GET определенный параметр. И при в контроллере на нужной странице проверять его наличие.
     
  3. GrblFF

    GrblFF

    Регистрация:
    10 мар 2014
    Сообщения:
    66
    Симпатии:
    1
    GET параметр как токен сессию, правильно?
     
  4. VaLeXaR

    VaLeXaR

    Регистрация:
    24 мар 2015
    Сообщения:
    61
    Симпатии:
    86
    Нет не сессию, а параметр.
    После public function index() { добавить
    Код:
    if (!isset($this->request->get('allow')) || $this->request->get('allow') !== 'true') {
                $this->redirect($this->url->link('error/not_found'));
            }
    И тогда переход на эту страницу возможен только если в ссылке есть параметр allow=true (/greate-account?allow=true)
     
  5. GrblFF

    GrblFF

    Регистрация:
    10 мар 2014
    Сообщения:
    66
    Симпатии:
    1
    А если делать по HTTP_REFERER, что нужно указывать в таком коде?
    Код:
    if($_SERVER['HTTP_REFERER'] == 'http://mysite/index.php?route=account/confirm') {
    header('location: http://mysite/index.php?route=account/register');
    } else {
    header('location: http://mysite/');
    } 
    В данном случае прямой переход по урл запрещен, происходит редирект на главную, а вот при переходе с рефера получаем бесконечный цикл :((
     
  6. VaLeXaR

    VaLeXaR

    Регистрация:
    24 мар 2015
    Сообщения:
    61
    Симпатии:
    86
    Если вы прописываете это в контроллере регистрации, то все правильно. Выходит если у вас реферер при переходе на странице регистрации http://mysite/index.php?route=account/confirm , то вы опять направляете на страницу регистрации. Тоесть у вас все время один и тот же реферер и переход на одну и ту же страницу.
    Код:
    if($_SERVER['HTTP_REFERER'] != 'http://mysite/index.php?route=account/confirm') {
    header('location: http://mysite/');
    } 
    Исправьте код на такой.
     
  7. GrblFF

    GrblFF

    Регистрация:
    10 мар 2014
    Сообщения:
    66
    Симпатии:
    1
    Спасибо. Но почему то в контроллере не хочет работать. Ругается то на неопеределенный индекс, то еще на что нибудь. Вставил в шаблон, все работает.
     
  8. VaLeXaR

    VaLeXaR

    Регистрация:
    24 мар 2015
    Сообщения:
    61
    Симпатии:
    86
    Детальнее про ошибку.
     
  9. GrblFF

    GrblFF

    Регистрация:
    10 мар 2014
    Сообщения:
    66
    Симпатии:
    1
    Отлично работает при вставке в шаблон перед <?php echo $header;?> в таком виде
    <?php if($_SERVER['HTTP_REFERER'] !== 'http://mysite/страница откуда пришли') {
    header('location: http://mysite/');
    }
    ?>

    Когда в контроллере в public function index()
    Notice: Undefined index: HTTP_REFERER in
     
  10. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    В ОК сбрасываются глобальные переменные запроса после переноса их содержимого в класс Request. Вместо $_SERVER['HTTP_REFERER'] используйте:
    PHP:
    $this->request->server['HTTP_REFERER']