/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Brug $_POST til at ændre $_SESSION ved kli~
Fra : Frank K. Jensen


Dato : 14-02-09 12:13

Hej,

Jeg kunne godt tænke mig at ændre en $_SESSION variable og reloade siden ved
klik på et link.

Jeg ved godt, at man kan gøre det med $_GET, men jeg vil helst ikke have
noget stående i URL'en, så kan man gøre det med $_POST?

Eller er der andre gode ideer?

mvh Frank



 
 
Johan Holst Nielsen (14-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 14-02-09 18:40

Frank K. Jensen wrote:
> Hej,
>
> Jeg kunne godt tænke mig at ændre en $_SESSION variable og reloade siden ved
> klik på et link.
>
> Jeg ved godt, at man kan gøre det med $_GET, men jeg vil helst ikke have
> noget stående i URL'en, så kan man gøre det med $_POST?

Jeg forstår ikke hvad det præcist er du ønsker at gøre? Hvorfor er GET
eller for den sags skyld POST parametren nødvendig? I hvilket tilfælde
skal det ske? Og hvorfor?

Er det et "automatisk" sideskift der sker uden brugerinteraktion eller
er det når brugeren trykker på en knap?

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Philip Nunnegaard (14-02-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 14-02-09 18:52

"Johan Holst Nielsen" <spam@phpgeek.dk> skrev

> Jeg forstår ikke hvad det præcist er du ønsker at gøre? Hvorfor er GET
> eller for den sags skyld POST parametren nødvendig? I hvilket tilfælde
> skal det ske? Og hvorfor?

Jeg bruger det et enkelt sted til at brugeren kan skifte sprog. Men her
bruger jeg så GET.
Egentlig bestemmes det af brugerens HTTP_ACCEPT_LANGUAGE, men
session-variablen overtrumfer så dette.

Den tid det står i URL'en er så kort at man ikke opdgager det, da den fil
der skifter $_SESSION["sprog"]'s værdi bare er en lille fil der slutter med:
header("location:".$_SERVER["HTTP_REFERER"]);

Det er egentlig også den metode jeg ville foretrække i andre tilfælde.
Filen vil så indeholde dette - og stort set ikke andet:

<?php
session_start();
$nyvaerdi = $_GET["ny_vaerdi"];

// Her indsættes evt. noget validering af $nyvaerdi, inden session-variablen
sættes

$_SESSION["variabel"] = $nyvaerdi;
header("location:".$_SERVER["HTTP_REFERER"]); // Brugeren ledes tilbage til
den side han kom fra
?>




Johan Holst Nielsen (14-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 14-02-09 19:02

Philip Nunnegaard wrote:
> "Johan Holst Nielsen" <spam@phpgeek.dk> skrev
>
>> Jeg forstår ikke hvad det præcist er du ønsker at gøre? Hvorfor er GET
>> eller for den sags skyld POST parametren nødvendig? I hvilket tilfælde
>> skal det ske? Og hvorfor?
>
> Jeg bruger det et enkelt sted til at brugeren kan skifte sprog. Men her
> bruger jeg så GET.
> Egentlig bestemmes det af brugerens HTTP_ACCEPT_LANGUAGE, men
> session-variablen overtrumfer så dette.

Jeg bruger det skam også mange steder :) Men det kan være vejlede Frank
korrekt, når man ikke kommer med mere specifikke oplysninger end han gør.

> Den tid det står i URL'en er så kort at man ikke opdgager det, da den
> fil der skifter $_SESSION["sprog"]'s værdi bare er en lille fil der
> slutter med:
> header("location:".$_SERVER["HTTP_REFERER"]);

Det synes jeg så ikke er super sundt. Vil mene det vil være en fordel at
kunne linke til et sprog. Generelt er jeg ikke meget man bruger samme
url til dansk og f.eks. engelsk indhold (med mindre man er klar over
konsekvenserne).

F.eks. vil Google aldrig indeksere begge sprog. Det er lidt ærgerligt -
efter som de i høj grad er derfra brugerne kommer.

Derfore vil jeg klart anbefale at man har en differencering i URL'en
mellem en dansk og en engelsksproget side. Det kan f.eks. være via en
_GET parametre - eller mere "nice" - via f.eks. url'en starter med /en/
og man så laver en lille sød URL rewrite i sin htaccess fil.


> $_SESSION["variabel"] = $nyvaerdi;
> header("location:".$_SERVER["HTTP_REFERER"]); // Brugeren ledes tilbage

Vær lige opmærksom på man kan sætte sin browser til *ikke* at sende en
referer.

Du bør nok ændre koden (hvis du bruger den i livemiljø) til noget ala

$goto = 'default_goto_url'; //typisk url til forsiden!
if(!empty($_SERVER['HTTP_REFERER'])) {
$goto = $_SERVER['HTTP_REFERER'];
}
header("Location: ".$goto); exit();

Derudover bør du tjekke hvad HTTP_REFERER indeholder. Altså at de ligger
indenfor dit domænenavn. :) Blot lidt info - ved ikke om det var live
kode du viste der - eller om det blot var et hurtigt skrevet eksempel.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Philip Nunnegaard (14-02-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 14-02-09 19:31

"Johan Holst Nielsen" <spam@phpgeek.dk> skrev

> Det synes jeg så ikke er super sundt. Vil mene det vil være en fordel at
> kunne linke til et sprog. Generelt er jeg ikke meget man bruger samme url
> til dansk og f.eks. engelsk indhold (med mindre man er klar over
> konsekvenserne).

Tak for påmindelsen, inden jeg nåede længere end til forsiden.
Google indekserer selvfølgelig kun den danske version.

> Vær lige opmærksom på man kan sætte sin browser til *ikke* at sende en
> referer.

Det var jeg ikke klar over (måske fordi jeg aldrig selv har interesseret mig
for at sløre min færden på nettet), andet end at jeg selvfølgelig ved at der
findes referer-spammere.

> Derudover bør du tjekke hvad HTTP_REFERER indeholder. Altså at de ligger
> indenfor dit domænenavn. :) Blot lidt info - ved ikke om det var live kode
> du viste der - eller om det blot var et hurtigt skrevet eksempel.

Det var noget jeg hurtigt havde skrevet ned, men også tæt på live-koden.
Tak for inputtet.


Philip Nunnegaard (14-02-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 14-02-09 18:41

"Frank K. Jensen" <frank2007-slet-dette-samt-årstal@indbakke.com> skrev

> Jeg kunne godt tænke mig at ændre en $_SESSION variable og reloade siden
> ved klik på et link.
>
> Jeg ved godt, at man kan gøre det med $_GET, men jeg vil helst ikke have
> noget stående i URL'en, så kan man gøre det med $_POST?

Det skulle nok kunne lade sig gøre, men så skal du ud i at lave det som en
formular a la dette:

<form id="skiftsession" method="post" action="skiftsession.php">
<input type="hidden" name="sessionvariabel" value="ny vaerdi">
<input type="submit" value="Skift værdi">
</form>

Indsæt selv "/" sidst i input-taggene, hvis du koder i XHTML.


Frank K. Jensen (15-02-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 15-02-09 00:45

"Philip Nunnegaard" <nunnenospam@hitsurf.dk> skrev i en meddelelse
news:49970215$0$56775$edfadb0f@dtext02.news.tele.dk...
> "Frank K. Jensen" <frank2007-slet-dette-samt-årstal@indbakke.com> skrev
>
>> Jeg kunne godt tænke mig at ændre en $_SESSION variable og reloade siden
>> ved klik på et link.
>>
>> Jeg ved godt, at man kan gøre det med $_GET, men jeg vil helst ikke have
>> noget stående i URL'en, så kan man gøre det med $_POST?
>
> Det skulle nok kunne lade sig gøre, men så skal du ud i at lave det som en
> formular a la dette:
>
> <form id="skiftsession" method="post" action="skiftsession.php">
> <input type="hidden" name="sessionvariabel" value="ny vaerdi">
> <input type="submit" value="Skift værdi">
> </form>

Ok, umiddelbart ser ovenstående ud til virke, i hvert fald hvis man bruger
en knap eller et billede. Jeg har dog ikke fundet ud af at få det til at
virke med et alm. tekst link.

Desuden skal man vist bruge "serialize", hvis man vil POSTe et array...
Hvilket volder mig lidt underlige tid-til-at-gå-i-seng-problemer

En ting, jeg dog oplever med ovenstående form, er at man ikke kan opdatere
siden eller gå tilbage uden at IE kommer med den der "For at vise siden
igen, skal IE sende de oplysninger du har givet igen"-fejl.
Hvordan kommer man uden om den? (Det er første gang jeg har brugt en form.)
Hvis man ikke kan det, vil jeg klart hellere bruge GET.

mvh Frank



Philip Nunnegaard (15-02-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 15-02-09 00:50

Frank K. Jensen skrev:

> En ting, jeg dog oplever med ovenstående form, er at man ikke kan opdatere
> siden eller gå tilbage uden at IE kommer med den der "For at vise siden
> igen, skal IE sende de oplysninger du har givet igen"-fejl.

Det er så en af grundene til at jeg ikke lader POST føre til en side,
men til en fil der videredirigerer til en side.
Så vil folk slet ikke opleve det problem.

Formular-side -> submit.php -> Ny side

Nu kender jeg ikke dine grunde til at det *skal* være POST, men
umiddelbart havde jeg nok bare valgt GET i dette tilfælde, med mindre
jeg kan se væsentlige sikkerhedsproblemer med det (som f.eks. hvis et
kodeord sendes med).

--
Philip

Frank K. Jensen (15-02-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 15-02-09 00:53

"Philip Nunnegaard" <nunnenospam@hitsurf.dk> skrev i en meddelelse
news:4997589c$0$56789$edfadb0f@dtext02.news.tele.dk...
> Frank K. Jensen skrev:
>
>> En ting, jeg dog oplever med ovenstående form, er at man ikke kan
>> opdatere siden eller gå tilbage uden at IE kommer med den der "For at
>> vise siden igen, skal IE sende de oplysninger du har givet igen"-fejl.
>
> Det er så en af grundene til at jeg ikke lader POST føre til en side, men
> til en fil der videredirigerer til en side.
> Så vil folk slet ikke opleve det problem.
>
> Formular-side -> submit.php -> Ny side

Så kan man vel heller ikke bruge "tilbage" kan man?

> Nu kender jeg ikke dine grunde til at det *skal* være POST, men
> umiddelbart havde jeg nok bare valgt GET i dette tilfælde, med mindre jeg
> kan se væsentlige sikkerhedsproblemer med det (som f.eks. hvis et kodeord
> sendes med).

Der er ingen sikkerhedsproblemer. Det er kun fordi jeg gerne ville holde
URL'en pæn.

mvh Frank



Frank K. Jensen (15-02-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 15-02-09 00:50

>> "Frank K. Jensen" <frank2007-slet-dette-samt-årstal@indbakke.com> skrev
>>
>>> Jeg kunne godt tænke mig at ændre en $_SESSION variable og reloade siden
>>> ved klik på et link.
>>>
>>> Jeg ved godt, at man kan gøre det med $_GET, men jeg vil helst ikke have
>>> noget stående i URL'en, så kan man gøre det med $_POST?

I øvrigt, det jeg gerne vil, er at man kan vælge forskellige indstillinger
(f.eks. om der skal vises små eller store billeder) ved at klikke på hhv.
nogle ikoner og nogle links.

mvh Frank



Bertel Lund Hansen (15-02-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-02-09 09:40

Philip Nunnegaard skrev:

> <form id="skiftsession" method="post" action="skiftsession.php">
> <input type="hidden" name="sessionvariabel" value="ny vaerdi">
> <input type="submit" value="Skift værdi">
> </form>

> Indsæt selv "/" sidst i input-taggene, hvis du koder i XHTML.

Og pak input-elementerne ind i <p> eller <div> hvis du koder i
strict HTML.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Philip Nunnegaard (15-02-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 15-02-09 18:46

Bertel Lund Hansen skrev:

> Og pak input-elementerne ind i <p> eller <div> hvis du koder i
> strict HTML.

Det glemte jeg lige at få med.
Jeg pakker dem altid ind i <p> på mine egne sider.

--
Philip

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste