Ga naar inhoud

php_self gebruiken voor redirect?


anoniem

Aanbevolen berichten

jaja daar ben ik weer... ik ben bezig met een soort van een catalogus. Iedereen kan er vrolijk doorheen bladeren (+-500 artikelen). Maar zodra iemand ergens op wilt reageren/aanschaffen/wijzigen moet hij of zij inloggen.. op zich zal ik dat wel prima voor elkaar krijgen maar zodra de inlog-pagina akkoord gaat met de gegevens wordt de bezoeker door het inlogscript teruggestuurd naar index.php stel dat diegene nu bij catalogus.php?artikel=244 zat te snuffelen en dacht "daar wil ik op reageren!" dan gaat hij inloggen en jawel... terug naar index.php (snetver, waar stond dat artikel nou??) kan ik zijn huidige positie opslaan in een sessie variabele met php_self en die variabele gebruiken om hem terug te brengen waar hij was? of is hier een andere functie voor?
Link naar reactie
Op het moment dat die gebruiker wordt doorverwezen naar jouw inlogpagina is voor je script een variabele beschikbaar die laat zien waar de gebruiker vandaan kwam, namelijk: $_SERVER["HTTP_REFERER"]; als je aan het einde van je inlogscript de volgende code gebruikt: header("Location:" . $_SERVER["HTTP_REFERER"]); gaat de bezoeker weer terug naar die pagina. Het is net als bij een formulier natuurlijk beter om eerst de waarde van $_SERVER["HTTP_REFERER"] te controleren en eventueel kun je het adres vasthousen in een session variabele als je bijvoorbeeld bij een verkeerde login de pagina nogmaals zou herladen (en dus de referer verandert)
Link naar reactie
maar ik moet de variabele opslaan terwijl hij nog op de "oude" pagina kijkt... als ik het doe zoals jij bedoelt en hij komt van www.rotjeknor.nl (hahaha ff geklikt en hij bestaat ook nog!! :lol: :lol: , was niet de bedoeling)dan gaat hij daar naar terug.. met de manier waarop ik het wou proberen kan ik controleren of hij bij mijn eigen site vandaan kwam door if isset(oudepositie) else index.php toch?
Link naar reactie
[quote:b681100809]maar ik moet de variabele opslaan terwijl hij nog op de "oude" pagina kijkt...[/quote:b681100809] dat is onmogelijk, maar op zich denk je wel juist. Idd, als iemand van rotjeknor.nl komt, dan zou die daar niet naar terug moeten, vandaar ook dat je de waarde van $_SERVER["HTTP_REFERER"] zou moeten controleren. Je zou kunnen controleren of de waarde ervan wel begint met het de url van je website. Maar in ieder geval, 'jouw techniek' en 'mijn techniek' zijn hetzelfde, maar $_SERVER["HTTP_REFERER"] is dus de variable die je moet hebben om te zien waar iemand vandaan komt.
Link naar reactie
toch loop ik te worstelen met referer.. ten 1 ste heb ik op php.net gelezen dat hij niet betrouwbaar is maar het belangrijkste is het volgende.. mijn login.php is selfredirecting.. dus als iemand een verkeerd wachtwoord invoerd komt hij weer in login.php terecht.. net zolang tot hij het opgeeft of het goede wachtwoord intikt. bij de eerste poging kan de referer netjes index.php zijn maar bij de tweede poging is het login.php.... daar gaat mijn idee... ik kan toch de link naar login.php in een include zetten met daar ongeveer in: if !isSet $_SESSION['user'] { $_SESSION['redirect'] = $PHP_SELF; echo "u moet eerst inloggen"; link naar inloggen } else Hallo gebruiker en dan bij de login de variabele $_session['redirect'] gebruiken voor de functie HEADER?
Link naar reactie
Als ik het geod begrijp wil je du siemadn laten registreren/inloggen en als dat is gebeurd, wil je de gebruiker weer naar het juiste artikel/pagina sturen. Ik zag dat je gebuik maar van een artikel_ID. Deze zou ik meesturen naar de login en bij de redirect weer meegeven aan de index.php. Misschien moet je in de index.php wel iets doen als een artikelnummer gevuld of leeg is.
Link naar reactie
[quote:3efbf7ef3c="maIRnaairruJ"]Het is net als bij een formulier natuurlijk beter om eerst de waarde van $_SERVER["HTTP_REFERER"] te controleren en eventueel kun je het adres vasthousen in een session variabele als je bijvoorbeeld bij een verkeerde login de pagina nogmaals zou herladen (en dus de referer verandert)[/quote:3efbf7ef3c] Je hebt alle stukjes van de puzzel bij elkaar. Je weet nu van sessie variabelen, je weet hoe je het adres moet uitlezen waar iemand vandaan kwam (de id is ook een idee, maar dat werkt niet meer zodra iemand niet vanaf een pagina komt met artikelen, zoals bijv. een contact pagina). Dus de eerste keer in het loginscript zet je die referrer in een sessie variabele en de volgende keren gebruik je die waarde. bijv: [code:1:3efbf7ef3c] if(empty($_SESSION['referer'])) $_SESSION['referer'] = $_SERVER["HTTP_REFERER"]; ... // login correct $loc = $_SESSION['referer']; $_SESSION['referer'] = ''; header("Location:" . $loc); // login niet goed header('Location:login.php');[/code:1:3efbf7ef3c] Ook als je de ID zou gebruiken zou het zo gaan, alleen is $_SERVER["HTTP_REFERER"] dan die ID
Link naar reactie
[quote:f0be342169="maIRnaairruJ"] [code:1:f0be342169] // login correct $loc = $_SESSION['referer']; $_SESSION['referer'] = ''; header("Location:" . $loc); ######--> Location tussen " en de .$loc // login niet goed header('Location:login.php'); #######--> nu de hele inhoud tussen ' (enkel)[/code:1:f0be342169] [/quote:f0be342169] Hee! dit valt me nu pas op! waarom is dit? waarin werkt dit niet? [code:1:f0be342169]header('Location: $loc');[/code:1:f0be342169] of [code:1:f0be342169]header('Location:' $loc);[/code:1:f0be342169] Sorry voor de misschien idiote vragen hoor maar soms wordt ik gek van die enkele en dubbele aanhalingstekens. ook die . bij .$loc snap ik niet... $loc werkt toch ook? alvast wederom bedankt!
Link naar reactie
  • 2 weken later...
Heel simpel, zoals je zelf al zei: (Bron: http://nl.php.net/reserved.variables) 'HTTP_REFERER' The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. Oftewel gebruik dit niet, maar bijv. het volgende: login.php ----------- <?php error_reporting(E_ALL); // dit zorgt voor redirect initialisatie voor gebruik :) if(isset($_GET['redirect']) && $_GET['redirect'] != '') { $redirect = htmlentities(stripslashes(trim($_GET['redirect']))); }else{ $redirect = ''; } // check of de surfer op de knop heeft gedrukt if(isset($_POST['login_submit'])) { // check login if(login == correct) { // gebruik hier je eigen manier om je login te checken echo 'Ingelogd! Klik <a href="'.$redirect.'">hier</a>'; }else{ echo 'Niet Ingelogd! Klik <a href="./login.php?redirect='.$redirect.'">hier</a> om te herkansen'; } }else{ ?> <form name="login_form" action="./login.php?redirect=<?=$redirect?>" method="post"> <input type="text" name="login_username" value="Username"></input><br /> <input type="password" name="login_password" value="Password"></input><br /><br /> <input type="submit" name="login_submit" value="Login"></input> </form> <?php } ?> catalogue.php ---------------- <?php echo 'Klik <a href="./login.php?redirect='.$_SERVER['PHP_SELF'].'">hier</a> om in te loggen'; ?> Dat zou in principe moeten werken (niet gechecked overigens, type fouten voorbehouden :D)
Link naar reactie
  • 3 weken later...
het topic is al redelijk oud maar is van mezelf :wink: Klopt het dat $_SERVER['HTTP_REFERER']; wordt geblokkeerd door firewalls? Met name bij Symantec Int. Security wordt hij niet aangemaakt... Is er een manier om dit te omzeilen? (de reden dat ik hier op doorga is omdat ik de redirect niet in de url wil hebben. In mijn ogen te gevoelig voor user-input :x )
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...