learnMedlem sedan jan. 20051 130 inlägg 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! :)
borttagen - bättre lösning längre ner
learnMedlem sedan jan. 20051 130 inlägg 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 Där fick ni något att bita i... ;)
Hur löser jag detta på bästa sätt? Tips..!
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 :)
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;
?>
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 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 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...
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 Javascript säger du, men det är ju enkelt att stänga av...
"Nöjd med lösningen...?"
- Ja
Tackar! :bire