Узнать где пользователь сайта был ранее

238
16 июля 2017, 12:37

Здравствуйте. При переходе на одну из страниц моего сайта (например site.ru/game) идет проверка на авторизацию, и если пользователь не авторизован, его перенаправляет на страницу входа (site.ru/login). Хочу после авторизации проверять историю переходов пользователя:

if(страница на уровень ранее == "site.ru/login" && страница на 2 уровня ранее == "site.ru/game") {
  window.location.href="site.ru/game"; // перенаправляем туда, куда он хотел попасть
}

С помощью js нашел как узнать на один уровень ранее, это document.referrer, но не нашел как получить страницу на 2 уровня ранее. Хотелось бы без использования сторонних библиотек. Если это нельзя сделать, то возможно с помощью PHP можно это сделать. Понимаю что пользователь может использовать режим инкогнито, где браузер ничего нам не даст, но для меня это не важно.

Answer 1

Используйте параметры HTTP запроса

  1. Пользователь запрашивает страницу site.ru/game.
    Сервер определяет, что пользователь не авторизован, и перенаправляет на страницу входа, добавив в параметры исходную страницу

    302
    Location: site.ru/login?return_url=game
    
  2. Браузер обрабатывает ответ 302, отправляет запрос на site.ru/login?return_url=game.
    Сервер рендерит страницу входа. Далее есть два варианта: ничего не делать или добавить return_url в <input type="hidden" name="return_url" value="game">.
    Возвращает страницу пользователю.

  3. Пользователь вводит логин и пароль, отправляет POST запрос.
    Сервер авторизует пользователя, ищет в параметрах URL или в данных POST (смотря какой вариант мы выбрали) return_url и осуществляет перенаправление

    302
    Location: site.ru/game
    
Answer 2

Юзайте COOKIE , смотрите, идея такова. Что когда пользователь переходит на страницу вашу страницу запускается мини алгоритм кук. Если кука есть значит пользователь пришел из нашего сайта, с определённой страницы. Если нет, то установить ее.

Тоесть открыл пользователь index.php.

1.Если куки нет, поставить ее .

if (isset($_COOKIE['old']) == false){
         setcookie('old', $_SERVER['REQUEST_URI']);
}

2. Если кука есть, то мы знаем на какой странице пользователь был!

if (isset($_COOKIE['old']) == false){
          setcookie('old', $_SERVER['REQUEST_URI']);
}else {
          echo 'Ты пришел из '.$_COOKIE['old'];
}

!!!Warning Делайте setcookie еще до использования echo. Иначе получите падение. Это связано с ограничением самого формата http. Или юзайте буферы (ob_start(); , ob_end_flush());

ob_start - включает буферизацию вывода.

ob_end_flush - очищает (отправляет) буфер вывода и отключает буферизацию вывода.

READ ALSO
Странная работа preg_match PHP 5.6

Странная работа preg_match PHP 5.6

Делаю регистрациюНаписал шаблоны для имени, фамилии и т

181
Помогите решить задачу по СИ [требует правки]

Помогите решить задачу по СИ [требует правки]

Даны строки A и BЕсли в A есть повторяющиеся символы, а в B нет повторяю- щихся символов, то упорядочить символы B в алфавитном порядке и удалить...

261