/ 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
PHPSESSID=blah
Fra : Martin


Dato : 15-07-03 21:22

Er ved at lave et lille community system og bruger sessions til at se om
brugerne er logget ind eller ej.
Der skal logges ind for at poste i forum, ændre i profil, tilføje links
osv...
Det jeg sætter ind i toppen af hver side er:

<?php
session_start();
//ser om brugeren er logget ind
if(isset($_SESSION[user])) {
//brugeren er logget ind $loggetind saettes til ja
$_ENV[loggetind] = "ja";
} else {
$_ENV[loggetind] = "nej";
}
?>
Det virker sådan set også fint nok, jeg bruger $_ENV[loggetind] til at se om
brugeren er logget ind og $_SESSION[user] til at se hvem det er hvis det er
tilfældet at brugeren er logget ind.

Når jeg går ind på min side med http://minserver/minmappe så tilføjes der et
?PHPSESSID=(en masse tal og bogstaver) til alle links
Men hvis jeg går ind med http://minserver/minmappe/ (altså med det sidste
'/' med) så er PHPSESSID tingen væk? Hvordan kan det være?

MVH
Martin
PS: husk at fjerne det åbentlyse hvis du vil maile til mig



 
 
Thomas Lindgaard (16-07-2003)
Kommentar
Fra : Thomas Lindgaard


Dato : 16-07-03 22:06

Martin wrote:
> Når jeg går ind på min side med http://minserver/minmappe så tilføjes der et
> ?PHPSESSID=(en masse tal og bogstaver) til alle links
> Men hvis jeg går ind med http://minserver/minmappe/ (altså med det sidste
> '/' med) så er PHPSESSID tingen væk? Hvordan kan det være?

Jeg er ikke sikker på at jeg er helt med på hvad dit problem er... men
her er et skud.

Sessions kan være sat op på to måder:
1) Session-id'et bliver hægtet på alle links på siden (så længe
session-id'et fremgår af URL'en er alt godt, men så snart man fjerner
det bliver man smidt ud af systemet).

2) Session-id'et bliver gemt i en cookie og der bliver ikke tilføjet
noget til alle links. Først når session-cookien bliver slettet bliver
man smidt ud af systemet.

Hvilken af de to muligheder du kører med fremgår af php.ini i linien:

session.use_cookies = 1 (dvs. min server er sat op til mulighed 2)

Så hvis du kører med mulighed 1 og gør følgende:
1) Logger ind (således at alle links på den efterfølgende side er
udstyret med ?PHPSESSID=bla)
2) Loader siden igen (men uden at inkludere session-id'et i URL'en)

.... så kan serveren ikke længere se at du var i gang med en session, så
$_SESSION-arrayet vil være tomt (det bliver oprettet med kaldet til
session_start() men bliver ikke fyldt med nogen værdier fordi du ikke
identificerer en specifik session), og derfor vil

if ( isset($_SESSION['user']) )

evaluere til FALSE (dvs. du er ikke længere logget ind).

Hvis du i stedet bruger session-cookies så vil du være logget ind så
længe cookien lever (dvs. indtil den udløber eller bliver slettet med et
kald til session_destroy()).

Til slut undrer det mig lidt at du bruger $_ENV til at finde ud af om
brugeren er logget ind... hvorfor ikke bare bruge $_SESSION?

Ved succesfuldt login sætter du $_SESSION['user'] til navnet på brugeren
eller 'ja' eller sårn - hvis login fejler så undlader du bare at sætte
$_SESSION['user'] til noget. Når du senere vil tjekke om brugeren er
logget ind spørger du bare på om $_SESSION['user'] er sat (og evt. på
værdien af den):

if ( isset($_SESSION['user']) )
{
// jubii brugeren er logget ind
}

Håber du kan bruge nogle af mine rablerier ovenfor.
/Thomas


Martin (16-07-2003)
Kommentar
Fra : Martin


Dato : 16-07-03 23:30


"Thomas Lindgaard" <thomas@it-snedkeren.BLACK_HOLE.dk> wrote in message
news:3f15be1c$0$5184$edfadb0f@dread11.news.tele.dk...
> Martin wrote:
> > Når jeg går ind på min side med http://minserver/minmappe så tilføjes
der et
> > ?PHPSESSID=(en masse tal og bogstaver) til alle links
> > Men hvis jeg går ind med http://minserver/minmappe/ (altså med det
sidste
> > '/' med) så er PHPSESSID tingen væk? Hvordan kan det være?
>
> Jeg er ikke sikker på at jeg er helt med på hvad dit problem er... men
> her er et skud.
Well, det er ikke rigtigt et problem, for siden virker fint, men mere noget
jeg undrer mig lidt over, nemlig at når session.use_cookies = 1 i php.ini,
ja så burde der jo ikke tilføjes 'PHPSESSID=blah' til alle links på en side.
Jeg prøvede at udkommentere session.use_cookies = 1 i php.ini og i stedet
sætte session.use_only_cookies = 1 i stedet. Men med samme resultat, der
bliver stadig tilføjet ?PHPSESSID=blah på links hvis jeg går ind på siden
vha. "http://minserver/minmappe" men ikke hvis jeg bruger
"http://minserver/minmappe/". Det er ikke noget der skader noget, for
sessions'ne virker fint og jeg kan sagtens logge ind. Det er bare lidt
undren over hvorfor den tilføjer det til alle links når jeg nu har sat den
til _kun_ at bruge cookies til sessions.


> Til slut undrer det mig lidt at du bruger $_ENV til at finde ud af om
> brugeren er logget ind... hvorfor ikke bare bruge $_SESSION?
>
> Ved succesfuldt login sætter du $_SESSION['user'] til navnet på brugeren
> eller 'ja' eller sårn - hvis login fejler så undlader du bare at sætte
> $_SESSION['user'] til noget. Når du senere vil tjekke om brugeren er
> logget ind spørger du bare på om $_SESSION['user'] er sat (og evt. på
> værdien af den):
>
> if ( isset($_SESSION['user']) )
> {
> // jubii brugeren er logget ind
> }
Tjah det undrer egentlig også mig, det er lavet kl prut om natten, så
tænkeren var nok ikke helt i top ;)

> Håber du kan bruge nogle af mine rablerier ovenfor.
Det kan jeg sagtens :)

MVH
Martin
PS: husk at fjerne det åbentlyse hvis du vil maile til mig



Martin (16-07-2003)
Kommentar
Fra : Martin


Dato : 16-07-03 23:36

"Martin" <mcmartin@FJERNofir.dk> wrote in message
news:3f15d1f8$0$13179$edfadb0f@dread15.news.tele.dk...
snip: en masse blah

Kom lige til at prøve igen (efter jeg havde reloadet apache modulerne... ;)
Og nu tilføjer den ikke PHPSESSID efter hver link, men bruger kun cookies
Men kan se hvis jeg f.eks. bruger w3c's validator på
http://validator.w3.org/ så tilføjes PHPSESSID
Men det må vel være fordi den jo ikke understøtter cookies eller hvad?

Desuden undrer det mig lidt at php som standard smider &PHPSESSID=blah ind
på siden, for det er iflg w3c ikke valid HTML 4.01
i stedet skal der bruges &amp;PHPSESSID=blah. Hvordan kan det være?

MVH
Martin



Mikkel Z. Herold \(M~ (17-07-2003)
Kommentar
Fra : Mikkel Z. Herold \(M~


Dato : 17-07-03 11:00

In news:3f15d35f$0$13185$edfadb0f@dread15.news.tele.dk,
Martin <mcmartin@FJERNofir.dk> typed:

> Desuden undrer det mig lidt at php som standard smider
> &PHPSESSID=blah ind på siden, for det er iflg w3c ikke valid HTML 4.01
> i stedet skal der bruges &amp;PHPSESSID=blah. Hvordan kan det være?

Kan ikke svare på. hvorfor det er sådan som standard, men du kan (så vidt
jeg husker) ændre det i php.ini.

Se
http://dk2.php.net/manual/en/configuration.directives.php#ini.arg-separator.output

Mvh.

Mikkel

--
"And my sanity scans the horizon"
Sting - The Wild Wild Sea

http://www.mzh.dk



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste