Перенаправить посетителя на последнюю посещенную страницу

D
На сайте с 01.09.2015
Offline
59
356

Здравствуйте.

Как на PHP перенаправлять посетителя на последнюю посещенную страницу? На сайте нет авторизации.

Например, если пользователь заходит на example.ru, затем по ссылке переходит на example.ru/2.php, браузер это запоминает, посетитель закрывает сайт и уходит. Через некоторое время он возвращается введя в адресной строке example.ru, но его тут же редиректит на example.ru/2.php, последнюю посещенную им страницу.

Помогите реализовать данный механизм на php?

S
На сайте с 30.09.2016
Offline
469
#1

Через куки.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Gerga
На сайте с 02.08.2015
Offline
94
#2

Digistive, класс:


class Controller
{
const LIFEDAYS = 12; // время жизни cookie в днях
const COOKKEY = 'controller_last_url'; // ключ к cookie класса

private $lastUrl; // последний url

public function __construct()
{
$this->lastUrl = '';
}

/**
* Метод запуска
* выполняет редирект при необходимости
* сохраняет последний url
**/
public function run()
{
if ($this->needRedirect()) {
$this->redirectTo(
$this->getLastUrl()
);
}

$this->updateLastUrl();
}

/**
* Метод проверяет на необходимость редиректа
**/
private function needRedirect(): ?bool
{
if (!isset($_SERVER['HTTP_REFERER']) && $this->getLastUrl()) {
return ($this->getLastUrl() != $this->getCurrentUrl());
}

return false;
}

/**
* Метод возвращает текущий url
**/
private function getCurrentUrl(): ?string
{
return $_SERVER['REQUEST_URI'];
}

/**
* Метод возвращает последний url
**/
private function getLastUrl(): ?string
{
if (!$this->lastUrl && (isset($_COOKIE[self::COOKKEY]) && $_COOKIE[self::COOKKEY])) {
$this->lastUrl = $_COOKIE[self::COOKKEY];
}

return $this->lastUrl;
}

/**
* Метод обновляет последний url
**/
private function updateLastUrl()
{
if ($this->getCurrentUrl() != $this->getLastUrl()) {
setcookie(self::COOKKEY, $this->getCurrentUrl(), time()+ 60 * 60 * 24 * self::LIFEDAYS, '/');
}
}

/**
* Метод выполняет редирект
**/
private function redirectTo(string $url = '')
{
if ($url) {
header('Location: ' . $url);
exit;
}
}
}

Определение, когда необходимо выполнять редирект, основано на этом условии:

Digistive:
затем по ссылке переходит на example.ru/2.php



---------- Добавлено 04.08.2019 в 11:44 ----------

Кстати, если что - это php7.

Y
На сайте с 26.07.2019
Offline
2
#3

если у сайта есть посетители из Европы, - учтите требования GDPR и ePrivacy.

Такие куки являются отслеживающими и для их установки нужно получать предварительное разрешение от пользователей из Евросоюза.

Другими словами, не забудьте отключить их установку для европейцев или поставить баннер на получение cookie согласия

А твой сайт соблюдает GDPR? Проверь (https://2GDPR.com/ru/) онлайн сканером
Anamnado
На сайте с 08.02.2010
Offline
242
#4

я делаю это так !

я в настройках браузера ставлю - открывать последние страницы

а интересные мне сайты держу вкладки открытыми лазаю читаю.

когда всё... вырубаю браузер..

- при новом открытии браузера открываются последние посещаемые мной страницы .

всякую хрень типа куки я блокирую потому что замахали ко мне отовсюду лесть эти Пуши - штука конечна хорошая но когда их излучают все сайты - это уже вред !

Y
На сайте с 26.07.2019
Offline
2
#5
Anamnado:
я делаю это так !
я в настройках браузера ставлю - открывать последние страницы
а интересные мне сайты держу вкладки открытыми лазаю читаю.
когда всё... вырубаю браузер..

ТС спрашивал о другом: как это реализовать на серверной стороне

Anamnado:

всякую хрень типа куки я блокирую потому что замахали ко мне отовсюду лесть эти Пуши - штука конечна хорошая но когда их излучают все сайты - это уже вред !

блокируете все cookies средствами браузера, или нажимаете отказаться на баннерах согласия cookies?

Если кликаете по баннеру, то увы это тоже не решает проблемы приватности.

На большинстве сайтов подобные баннеры на самом деле не отключают кукисы, что является нарушением европейского регламента GDPR и директивы ePrivacy.

Можете сами в этом убедиться, проверив несколько сайтов на https://2GDPR.com

Anamnado
На сайте с 08.02.2010
Offline
242
#6
yusik:
ТС спрашивал о другом: как это реализовать на серверной стороне

вот я и написал ответ на вопрос - зачем .

yusik:
блокируете все cookies средствами браузера, или нажимаете отказаться на баннерах согласия cookies?

настойки Браузера запретить куки

но все равно баннеры всплывают я их прост оигнорирую

Samail
На сайте с 10.05.2007
Offline
334
#7
yusik:
Другими словами, не забудьте отключить их установку для европейцев

А если забудет тогда что будет? Очередные антироссийские санкции введут или просто нужен был повод ссылку на свой сайт пихнуть?

Y
На сайте с 26.07.2019
Offline
2
#8
Samail:
А если забудет тогда что будет? Очередные антироссийские санкции введут или просто нужен был повод ссылку на свой сайт пихнуть?

столь эмоциальную критику принял.

Если вопросы не риторические, для обсуждения по существу прошу в личку

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