Връщана обратно към страницата от която си дошъл

pro12

Registered
Връщам към предходната страница така.
PHP:
if (isset($_SERVER['HTTP_REFERER'])) {
  header('Location: '.$_SERVER['HTTP_REFERER']);
 }
Но понякога $_SERVER['HTTP_REFERER'] се оказва, че е празно. За това търся по добър начин. Мисля да го направя с сесия. Има ли начин да записвам в сесията предишната страница без да презаписвам в сесията сегашната страница?
 
Има случаи в който $_SERVER['HTTP_REFERER'] е null и не можеш да направиш нищо - например, ако потребителя е отворил страницата директно, чрез изписване на url адреса в бара - в такъв случай сесията няма да те спаси.

По-принцип, ако навигацията между страниците е организирана с линкове - http_referer не би трябвало да е null.

Дай малко повече информация кога остава празно.
 
pro12 каза:
При редактиране на url адреса

Редактиране в адрес бара? Тогава е напълно нормално да няма нищо, тоест да е null.

Със сесии можеш да решиш донякъде този проблем - имай предвид, обаче, че ще трябва да се грижиш за сесията - кога ще се презаписва, кога ще трябва да се изчиства и така нататък.
 
Може ли да се направи следното нещо? В сесията да се записва урл на старата страницата само като отворя нова.
 
Но като имам една сесия ще стане презаписване и ще имам адреса на новата стр. Май трябва да ги записвам в дб.
 
Ти цялата история ли искаш да записваш? Аз останах с впечатлението, че искаш да запишеш само предишната страница.

Това имах предвид:

PHP:
$previousPage = null;

// TODO: Check if the user comes from an external URL
if ($request->getSession()->has('previous_page')) {
    $previousPage = $request->getSession()->get('previous_page');
}

// The current page is no longer a new page, save it as a previous page for the next request
$request->getSession()->set('previous_page', $request->getPathInfo());

if ($previousPage) {
    // Do whatever you want with the previous page
}
 
Предишният код прави точно това, но използвах HttpFoundation на Symfony, за да не се налага да разлиствам документацията на PHP...

Процедурно би трябвало да изглежда така.

PHP:
<?php

session_start();

$previousPage = null;

// TODO: Check if the user comes from an external URL
if (isset($_SESSION['previous_page'])) {
    $previousPage = $_SESSION['previous_page'];
}

// The current page is no longer a new page, save it as a previous page for the next request
$_SESSION['previous_page'] = $_SERVER['PATH_INFO'] ?? '/';

if ($previousPage) {
    // Do whatever you want with the previous page
    echo $previousPage;
}
 
pro12 каза:
Ако не се поддържа
PHP:
$_SERVER['PATH_INFO']
имали др вариант?
Колега, ако нямаш сетната сървърна стойност за това от къде идва потребителя си постави дефоутова такава.

PHP:
<?php
function getUrl() {
	$url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https://' : 'http://';
	$url .= ($_SERVER['SERVER_PORT'] != '80') ? ($_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]) : ($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
	return $url;
}

if (isSet($_SERVER['HTTP_REFERER']) and !empty($_SERVER['HTTP_REFERER'])) {
	$previousPage = $_SERVER['HTTP_REFERER'];
} else {
	$previousPage = getUrl();
}

print $previousPage;

По-горе ти дадоха код за сесия, а аз ще ти дам код как да си изградиш стрингово линка на страницата в която си в момента. Ти реално ако нямаш сетната променлива за референция, то потребителя директно е постъпил страницата за първи път и е нормално да нямаш предишно посещение от него.
 
Дали ще е PATH_INFO или REQUEST_URI, зависи от приложението ти. Аз игнорирах query параметрите, понеже те по природа са опционални, но ако зависиш от тях, взимай си ги - няма проблем.
 

Горе