webForumDet fria alternativet

Refererande sida

10 svar · 689 visningar · startad av learn

learnMedlem sedan jan. 20051 130 inlägg
#1

Jag försöker lösa refererande-sida-problemet som många av oss säkerligen stött på. Variabeln $_SERVER['HTTP_REFERER'] fungerar ju som bekant inte alltid.

Min idé bygger på att man sist på alla sidor lagrar aktuell sidas URL i en session, $_SESSION['referer']. Om man sedan behöver en bakåt-knapp ngnstans så är det bara att skriva <a href="<?=$_SESSION['referer']?>">Bakåt</a>, eftersom det är föregående sida som senast sparats i sessionen. Det fungerar ju galant, tills ngn besökare får för sig att uppdatera sidan mha webbläsarens refresh-knapp, då ligger aktuell sidas URL i sessionen...

Någon som kan hjälpa mig med detta dilemma? Hur kan jag göra, jag är helt slut i skallen...

Alla tips på lösningar mottages med tacksamhet! :)

hampus_bMedlem sedan dec. 200539 inlägg
#2

borttagen - bättre lösning längre ner

learnMedlem sedan jan. 20051 130 inlägg
#3

Hmm, nja. Hur menar du? Följande funkar inte:

$thispage = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

if ($thispage != $_SESSION['lastpage']) {
  $_SESSION['beforelastpage'] = $_SESSION['lastpage'];
  $_SESSION['lastpage'] = $thispage;
} else {
$_SESSION['lastpage'] = $_SESSION['beforelastpage'];
} 

echo $_SESSION['lastpage'];

Var det så du menade?

learnMedlem sedan jan. 20051 130 inlägg
#4

Där fick ni något att bita i... ;)

Hur löser jag detta på bästa sätt? Tips..!

hampus_bMedlem sedan dec. 200539 inlägg
#5

lösning

så här, t.ex:

 <?
session_start();

$thispage = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
 
if(!isset($_SESSION['ph'])) {
	$_SESSION['ph'][] = $thispage;
}
 
 if(isset($_SESSION['ph']) && $_SESSION['ph'][0] != $thispage) {
 	array_unshift($_SESSION['ph'],$thispage);
}

echo "SENASTE VISADE SIDAN:<br>";
echo "<strong>";
echo isset($_SESSION['ph'][1]) ? $_SESSION['ph'][1] : "finns ingen tidigare sida";
echo "</strong>";

echo "<h2>Hela historiken</h2>";
foreach ($_SESSION['ph'] as $k => $v) {
	echo "$k $v<br>";
}

?>

... exemplet håller hela historiken. testa scriptet genom att spara som test.php, kör sedan i webbläsaren och ändra bara adressen så här:

test.php?dummy=1
test.php?dummy=2
test.php?dummy=3 etc.

när du reloadar så visas fortfarande rätt. etc... enkelt :)

hampus_bMedlem sedan dec. 200539 inlägg
#6

eller i kortform:

<?
session_start();

$thispage = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

if(!isset($_SESSION['ph'])) { $_SESSION['ph'][] = $thispage; }

if(isset($_SESSION['ph']) && $_SESSION['ph'][0] != $thispage) {
    array_unshift($_SESSION['ph'],$thispage);
}

echo isset($_SESSION['ph'][1]) ? "<a href='" . $_SESSION['ph'][1] . "'>Förra sidan</a>" : false;

?>
hampus_bMedlem sedan dec. 200539 inlägg
#7

konsekvensen av lösningen är förstås att "förra sidan" alltid pekar på förra sidan - inte att den stegar bakåt i tiden (klicka på länk 1 sen 2 sen 3 sen "bakåt" => 2, sen bakåt => 3...)

vill du att den ska fungera som en "riktig" bakåtknapp eller ska den bara gå till "förra" sidan... två lite olika saker :)

//hampus

learnMedlem sedan jan. 20051 130 inlägg
#8

Gokväll,

Tack för din hjälp Hampus!

vill du att den ska fungera som en "riktig" bakåtknapp eller ska den bara gå till "förra" sidan...

Jag vill att man ska komma till den sida man var på innan.

Ska kika närmare på ditt förslag imorrn.

Godnatt :)

learnMedlem sedan jan. 20051 130 inlägg
#9

Så nu har jag testat att leka lite med ditt script, och det funkar ju galant! Man tackar! (y)

Är detta ett vanligt sätt att göra på tror du? Ett problem finns ju dock, ifall användaren stängt av sessioner...

hampus_bMedlem sedan dec. 200539 inlägg
#10

Det "vanliga" sättet att göra det är väl med javascript:
<a href="javascript:back()">bakåt</a>

Användaren kan inte stänga av sessions (som sparas på servern) utan bara cookies (som sparas på klienten och - enkelt uttryckt - håller reda på vilken session id användaren har). PHP kan själv lösa detta genom att propagera session id via länkarna, så det är inget problem (fast det kan vara lite struligt). läs mer om det på http://se.php.net/manual/en/ref.session.php

Ska du använda scriptet bör du fundera på att rensa arrayn också så att den inte bara växer och växer...,typ:

if (sizeof($_SESSION['ph']>10) { array_pop($_SESSION['ph']); }

... där 10 håller ordning på hur många klick bakåt php ska hålla i minnet...

Är du nöjd med lösningen, markera tråden som löst.

allt gott,

//hampus

learnMedlem sedan jan. 20051 130 inlägg
#11

Javascript säger du, men det är ju enkelt att stänga av...

"Nöjd med lösningen...?"
- Ja

Tackar! :bire

133 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)