webForumDet fria alternativet

Sessioner, GET och redirect

5 svar · 290 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Nu har jag ett intressant problem. Jag fattar som vanligt ingenting, men förhoppningsvis gör nån annan det.... :l

Jag har två filer som använder sessionsvariabler. Den ena login.php loggar in, den andra my.php kräver att man är inloggad. Själva inloggningen fungerar, så länge jag loggar in och ut och hoppar mellan dessa två filer rakt upp och ner är det grönt.

Men... om man anländer till my.php utan att vara inloggad så händer följande:

 
if (!isIn()) {
   header("Location: login.php?go=cp");
}

Då hamnar man i login och URL:n är login.php?go=cp som den borde vara. Sedan loggar jag in, då körs en funktion i login som kollar att allt är OK, man finns i db:n osv, och sätter sessionsvariabler om allt är grönt, sedan kommer man till följande:

 
if (wasChosenGET("go", "cp")) header("Location: my.php");
else header("Location: message.php?mess=Successfully logged in!");

//där funktionen är
function wasChosenGET($name, $val) {
   return (isSet($_GET["$name"]) && $_GET["$name"] == $val);
}

Som URL:n ser ut borde jag hamna i my tycker jag.
Men det gör jag inte!!! Jag hamnar i message!?!?!? :q VARFÖR?

Däremot fungerar följande: om jag går till login med URL:n
login.php?go=out så blir jag utloggad - på följande kod:

if (isIn() && wasChosenGET("go", "out")) {
   logout(); }

Var är skillnaden??? :q :x

RED: Rättade parentesfel

MatteMedlem sedan aug. 20002 975 inlägg
#2

Du går till login.php?go=cp.
Där får du upp ett inloggningsformulär.
När du postar detta formulär är det den URL du har i din action som skickas.

Finns inte go=cp i din action kommer skriptet du postar till sedan att gå till message.

Du måste alltså via dina GET-variabler styra adressen i action.

aasahMedlem sedan mars 20034 471 inlägg
#3

Ååååh! Så fast att det ser ut så här:

$me = $_SERVER['PHP_SELF'];
<form method="POST" name="LoginForm" action="$me" >

Så följer inte GET-variablerna med? :q Stämmer det?

Tydligen... just testat.

TACK, Matte! Tusen tack! :birp

tydalMedlem sedan juni 20034 013 inlägg
#4

Det enkla sättet att kolla upp om det stämmer är ju att titta i sidans html-kod i webbläsaren. Eller att skriva echo($me); i koden.

GET-variablerna finns i $_SERVER['QUERY_STRING']

MatteMedlem sedan aug. 20002 975 inlägg
#5

aasah skrev:

Så följer inte GET-variablerna med? :q Stämmer det?

Nej, det gör de inte.

Om du har REQUEST_URI på din server kan du skriva:

$me = $_SERVER['REQUEST_URI'];

Annars får du som tydal säger skriva:

$me = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
aasahMedlem sedan mars 20034 471 inlägg
#6

Matte skrev:

...Om du har REQUEST_URI på din server kan du skriva:

$me = $_SERVER['REQUEST_URI'];

Annars får du som tydal säger skriva:

$me = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];

Smart. :) Bra att veta i framtiden. Löste det simpelt nu eftersom det bara är go som kan sättas med tillägget:

if (isSet($_GET["go"])) $me .= "?go=".$_GET["go"];

Tack än en gång! :) Glömde uppdatera tråden så ursprungliga tacket är högre upp...

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