2015-08-18 18 views
5

Ho una pagina denominata Login.php. Ho bisogno dell'URL della pagina prima dell'ultima pagina.Come ottenere l'URL di due pagine precedenti in php

Quando il modulo di accesso utente verrà inviato a check_login.php che controlla nome utente e password. Quindi reindirizzerò l'utente a index.php.

Il problema è che voglio che l'utente venga reindirizzato alla penultima pagina visitata.

ESEMPIO:

Prima URL:www.example.com/posts/1

Seconda URL:www.example.com/login.php

Terzo URL:wwww.example.com/check_login.php

Quindi, se il nome utente e la password sono corretti =>header('location: www.example.com/posts/1');

C'è una soluzione per ottenere l'URL precedente:

// login.php 
$_SESSION['url'] = $_SERVER['HTTP_REFERER']; 

// check_login.php 
header('location: '.$_SESSION['url']); 

Ma ho bisogno di ottenere il secondo per ultimo URL, non l'ultimo URL. Come posso farlo in PHP?

+1

Per quanto ne so, no – Soundz

+0

n. il referente ha solo (a volte/forse) la pagina precedente IMMEDIATAMENTE. se vuoi tracciare più pagine precedenti, dovrai registrarlo in qualche modo. –

+1

Sidenote: non si deve fare affidamento su $ _SERVER ['HTTP_REFERER'] –

risposta

4

Do quello che gli altri hanno fatto:

Prima soluzione:

creano un campo hidden nelle vostre pagine in modo che quando un utente fa clic su login che lo porterà alla pagina login.php con il precedente collegamento. Quindi puoi fare tutto ciò che vuoi (ad esempio salvandolo su $_SESSION['url']) con questo link.

seconda soluzione:

Immaginate di avere un'ancora in questo modo: <a href="login.php">login</a>. Invece di utilizzare solo login.php è possibile utilizzare login.php?redirect_to=http://example.com/post/1 in modo da poter accedere all'URL dalla propria pagina login.php con una richiesta $_GET['redirect_to'].

NOTA: Ricordarsi sempre di disinfettare i dati di input dell'utente.

+0

ringraziamenti, vota +1 per te – Shafizadeh

1

Ma voglio sapere che c'è un modo per ottenere direttamente due URL precedenti?

Sì, avete bisogno della sessione. es

if(!isset($_SESSION['url'])) 
    $lurl = array(); 
else 
    $lurl = $_SESSION['url']); 
$count = count($lurl); 
$lurl[$count % 2] = $_SERVER['HTTP_REFERER']; 
$_SESSION['url'] = $lurl; 

Caveat: (php manual) L'indirizzo della pagina (eventuali) di cui l'agente utente alla pagina corrente. Questo è impostato dall'utente agente. Non tutti gli interpreti useranno questa impostazione, e alcuni offrono la possibilità di modificare HTTP_REFERER come caratteristica. In breve, non ci si può davvero fidare.

+0

la tua risposta è come quello che ho detto, comunque grazie, voto +1 per te. – Shafizadeh

1

Suppongo che la risposta di @ GinoDeMaria funzioni, ma sta facendo alcuni controlli non necessari e sta ancora effettuando più chiamate per assegnare variabili.

usando le sessioni

Quindi un modo più semplice per farlo sarebbe:

$_SESSION['2last_url'] = isset($_SESSION['last_url']) ? $_SESSION['last_url'] : null; 
$_SESSION['last_url'] = $_SERVER['HTTP_REFERER']; 

Così $_SESSION['2last_url'] contiene il valore che si sta cercando.

Ora come Gino ha dichiarato che l'agente utente non imposta sempre correttamente $_SERVER['HTTP_REFERER'].

utilizzato un reindirizzamento VALORI IN RICHIESTA

Questo metodo è un po 'più elegante, e potrebbe rivelarsi molto più utile. Basta dire allo check_login.php dove reindirizzare l'utente dopo il login.

Per prima cosa comunichiamo alla pagina di accesso dove reindirizzare. Quindi, invece di andare a login.php, andiamo a login.php?redirect=http%3A%2F%2Fexample.com%2Fpost%2F1. (Potresti notare che l'URL di reindirizzamento è strano, a causa della codifica dell'URL. O use a tool like this o check out PHP's urlencode() function).

Ora nel tuo login.php è necessario aggiungere un campo nascosto che contiene questo valore:

<input type="hidden" name="redirect" value="<?php echo $_GET['redirect']; ?>"> 

Poi nel check_login.php solo ottenere quel valore:

header("Location: " . $_POST['redirect']); 

E ci si va.

+0

interessante, vota +1 per te .. – Shafizadeh