[PHP] Inlog Uitlog & refresh probleem

Pagina: 1
Acties:
  • 259 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
heb over al gezocht maar kan geen informatie vinden over dit probleemp(je).

heb een inlog systeem voor een shop gebouwd. inloggen werkt perfect. Er worden $_SESSIONS aan gemaakt, ect. voor gemak f.inc.php genoemd

als ik ingelogd ben zie ik netjes mijn "admin page", MAAR mijn inlog button blijft dan nog steeds zichtbaar. PAS als ik op mijn site ga brouwsen (of refreshen), verandert de Login Button in Log Out Button.

Na uitloggen laat ie wel netjes de login button meteen zien!!

Waar die de links moet verwisselen (menu.php) heb ik dit staan
<?PHP
session_start()
include *.php (* is een willekeurige file name)

if(isset($_SESSION['bla']) && !empty($_SESSION['bla']))
laat logout button zien
else
laat login button zien
......
......
......
?>

Heb het geprobeert op te lossen met

echo "<html><head><META HTTP-EQUIV=\"Refresh\" content=\"0;URL=index.php\"></head></html>";

in f.inc.php en menu.php maar dan reload ie de site twee keer en dat is niet zo mooi.

weet iemand hoe ik dit netjes kan oplossen???

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Je kunt het volgende gebruiken:
PHP:
1
header('Location: ./index.php');

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

PHP:
1
header("Location: ".$_SERVER['PHP_SELF']);

Acties:
  • 0 Henk 'm!

  • ReddishRat
  • Registratie: Juli 2003
  • Laatst online: 23-02-2023
Of inderdaag php self :9

Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 17-09 17:39
Ik heb ook dit probleem.
Maar die header voldoet niet als er ouptut wordt gegeven. Wat dan?

Acties:
  • 0 Henk 'm!

Verwijderd

Dan kan je overschakelen op JavaScript. Dan krijg je hetvolgende script:
PHP:
1
2
3
<?php
echo '<script type="text/javascript">window.location="'.$_SERVER['PHP_SELF'].'";</script>';
?>

Javascript is wel trager als php, maar dit is een werkende oplossing.

Groeten, Cybertinus

[ Voor 31% gewijzigd door Verwijderd op 18-10-2003 18:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Snap het hele probleem eigenlijk niet.. als je inlogd wordt de pagina toch ook vernieuwd.

als je dit:
PHP:
1
2
3
4
if(isset($_SESSION['bla']) && !empty($_SESSION['bla']))
laat logout button zien
else
laat login button zien

goed neerzet dan moet het toch gewoon werken.

Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 22:39

_Sunnyboy_

Mooooooooooooooooo!

gomaster schreef op 18 October 2003 @ 17:40:
Ik heb ook dit probleem.
Maar die header voldoet niet als er ouptut wordt gegeven. Wat dan?
Of je moet ouputbuffering gebruiken. dan kan je wel header geven nadat je output hebtgegeven, omdat deze output nog niet is weggestuurd. zie ob_start()

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Acties:
  • 0 Henk 'm!

Verwijderd

Het zal me niet verbazen als hier het probleem zit zoals gebruikelijk bij PHP
PHP:
1
if(isset($_SESSION['bla']) && !empty($_SESSION['bla']))


Waarschijnlijk bestaat $_SESSION['bla'] nog gewoon.

Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 17-09 17:39
_Sunnyboy_ schreef op 18 October 2003 @ 22:28:
[...]


Of je moet ouputbuffering gebruiken. dan kan je wel header geven nadat je output hebtgegeven, omdat deze output nog niet is weggestuurd. zie ob_start()
Ja dat is waar. Maar dan kan je die output weer moeilijk weergeven omdat de pagina wordt gerefreshed. Maar goed ik heb mn script al verbouwd en heb het probleem nu niet meer :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
heb de voorbeelden van boven geprobeert maar hou dezelfde probleem.

kan het aan iets anders liggen?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gomaster schreef op 19 October 2003 @ 10:21:
[...]

Ja dat is waar. Maar dan kan je die output weer moeilijk weergeven omdat de pagina wordt gerefreshed. Maar goed ik heb mn script al verbouwd en heb het probleem nu niet meer :)
hoe heb jij het opgelost?

Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 17-09 17:39
Verwijderd schreef op 19 oktober 2003 @ 13:14:
[...]


hoe heb jij het opgelost?
Een doorstuur pagina ertussen gezet. Dus als er is uitgelogd wordt ie via een andere pagina doorgestuurd. Daardoor pakt ie hem wel. Iig bij mij :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gomaster schreef op 19 October 2003 @ 15:41:
[...]

Een doorstuur pagina ertussen gezet. Dus als er is uitgelogd wordt ie via een andere pagina doorgestuurd. Daardoor pakt ie hem wel. Iig bij mij :)
snap niet wat je bedoelt heb je een voor beeld code? of betere uitleg

thnx

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 18 October 2003 @ 22:49:
Het zal me niet verbazen als hier het probleem zit zoals gebruikelijk bij PHP
PHP:
1
if(isset($_SESSION['bla']) && !empty($_SESSION['bla']))


Waarschijnlijk bestaat $_SESSION['bla'] nog gewoon.
die session bestaat ook op in de file waar die aangemaakt wordt, maar in waar die aangeroepen wordt niet heb ik gemerkt, pass als ik handmattig refresh wordt ie geset

lees de beschrijving van mijn situatie boven

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 18 October 2003 @ 19:39:
Snap het hele probleem eigenlijk niet.. als je inlogd wordt de pagina toch ook vernieuwd.

als je dit:
PHP:
1
2
3
4
if(isset($_SESSION['bla']) && !empty($_SESSION['bla']))
laat logout button zien
else
laat login button zien

goed neerzet dan moet het toch gewoon werken.
wat snap jij niet?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 18 October 2003 @ 18:50:
Dan kan je overschakelen op JavaScript. Dan krijg je hetvolgende script:
PHP:
1
2
3
<?php
echo '<script type="text/javascript">window.location="'.$_SERVER['PHP_SELF'].'";</script>';
?>

Javascript is wel trager als php, maar dit is een werkende oplossing.

Groeten, Cybertinus
werkt ook niet :(

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

D_Original :
Kun je niet eens je hele code hier neerzetten met een duidelijke uitleg. Want je geeft nu eigenlijk alleen maar losse flarden weer van je probleem.

Het is ook mogelijk om meerdere dingen in één post te zetten. :)

[ Voor 16% gewijzigd door dArtagnan op 19-10-2003 16:10 ]


Acties:
  • 0 Henk 'm!

  • ggvw
  • Registratie: September 2001
  • Laatst online: 15-12-2024
Staat je session_start wel op een goede plek? Misschien session_start dubbel aangeroepen in je include?

Als je script écht pas na een refresh de sessie ziet, (wat een beetje vreemd is), dan zou je bijvoorbeeld de login knop in een borderless iframe kunnen zetten en dat laten verversen met javascript.

Snap eigenlijk het probleem niet echt goed. Post eens een stukkie script :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok no g een keer dan

hier zijn de code (files) die met elkaar werken:

index.php ==> hier word alles vandaan aangeroepen
menu.php ==>bevat de menu aan de linker kant (incl. login/logout button)
inlog.php==> bevat procedure voor de login process, checks ect


//-- index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
session_start();

include 'menu.php';
include..........;
......
......
.....


....
include x.php

//table def. ect

?>


//--menu.php
PHP:
1
2
3
4
5
6
7
8
9
<? php
session_start();

if(isses($_SESSION['inlog'] && !empty(S_SESSION['inlog']))
   laat loguit button zien
else
   laat login button zien

?>


//inlog.php
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? php
session_start();

if(isset($_SESSION['inlog'] && !empty($_SESSION['inlog']))
   ga verder met brouwsen
else
  laat login scherm zien

if($inlog && $pwd)
  if(sql query code)
      $_SESSION['inlog']=$inlog;
else
  error code

?>


Beschrijving:

Voor de duidelijkheid heb ik niet alle code gegeven. dus alleen de code die met dit topic te maken heeft.

in alle files waar nodig wordt session_start() aangeroepen

menu.php en inlog.php worden geinlcude in index.php

zoals boven gemeld bevat menu.php een code die check of session geset is of niet.
--zo ja? ==> laat dan de logout button zien
--zo niet?! ==> laat dan login button zien

in inlog.php wordt gekeken of een gebruiker al ingelogd is en session geset is
--zo ja? ==> laat de gebruiker door brouwsen
--zo niet?! ==> laat dan inlogscherm zien

Het probleem (nog steeds) is het lijkt als of $_SESSION['inlog'] net geset is in menu.php, wanner inmand inlogd. Pas wanneer de site gerefreshed word verandert de inlog button in uitlog button, dus dan pass wordt $_SESSION['inlog'] geset.

ik hoop dat de situatie nu duidelijker is geworden

Dus nu hoe krijg ik voor elkaar dat wanneer iemand correct inlogd de uitlog button meteen zich baar wordt??

Acties:
  • 0 Henk 'm!

  • Blue_Thunder_NL
  • Registratie: Februari 2000
  • Laatst online: 15-09 20:31
Hmmm, ligt het niet aan de volgorde van de include's in index.php? Dus:

Gebruiker is niet ingelogd:
index.php wordt geladen, menu wordt geinclude, daarna login.php. Er komt nu een login scherm ==> gebruiker voert login-gegevens in en submit het form ==> index.php wordt geladen, menu wordt geinclude en daarna weer login.php ==> login.php verwerkt login en als deze goed is dan wordt de $_SESSION var geset.

menu.php staat dus nu al op het scherm of is iig al verwerkt, maar dit is gebeurd voordat login.php verwerkt werd en de $_SESSION var geset werd.

Als je de twee omwisselt in index.php zou het wel moeten werken volgens mij...

EDIT:
Verder heb je idd. twee keer session_start() staan: zowel in login.php als menu.php. Een keer is genoeg! bv. in index.php

[ Voor 15% gewijzigd door Blue_Thunder_NL op 23-10-2003 07:54 ]

Ik wil zoveel, maar ik doe zo weinig


Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Ik heb ook wel een keer zoiets gehad, maar dan bij uitloggen en misschien heb je er wat aan. Het ging er toen om dat als ik op uitloggen klikte, hij de indexpagina met ?action=logout laadde, maar dat ik het php gedeelte waarbij ik mijn sessie verwijderde om uit te loggen ergens midden in de pagina had staan en niet bovenaan. Dus je moet het bovenaan zetten, voor alle code waarbij je sessie variabelen kunnen worden gelezen..
edit:

Misschien een beetje zoals in de vorige post dus..

[ Voor 8% gewijzigd door esf op 23-10-2003 10:05 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

Verwijderd

Het heeft zoals Blue_Thunder_NL zei iets te maken met de volgorde van je constructies. in login.php heb je eerst code voor het weergeven van de button en daarna pas ga je kijken of de gebruiker aan het inloggen is! Dat moet ff andersom.

Zorg bij een login scherm EERST voor het daadwerkelijke inloggen, pas DAARNA content weergeven.

code:
1
2
3
4
5
6
7
8
9
10
inloggen: (doe dit in een auto_prepend_file als 't kan!)
ingelogd?
ja: go to content:
nee: login/passwd opgestuurd?
    ja: verify in db. correct?
        ja: log gebruiker in. go to content:
        nee: go to login screen again. exit()
    nee: login screen. exit()
content:
???


Ga alsjeblieft niet prutsen met header(), javascript of reload constructies! das echt minder veilig/betrouwbaar.

Overigens zijn er wel goede authentication scripts te vinden op hotscripts, maar dat wil je waarschijnlijk niet horen :P

[ Voor 2% gewijzigd door Verwijderd op 23-10-2003 12:14 . Reden: niet leesbaar zonder code tag ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Koraalduivel schreef op 18 October 2003 @ 16:22:
PHP:
1
header("Location: ".$_SERVER['PHP_SELF']);
ik heb toch maar deze oplossing voor tijdelijk genomen want ik kom er anders echt niet uit. om het op een mooiere en better manier te doen.

ik heb dit stukje boven in inlog.php gezet na de login check daar.

het werkt, maar nu zit ik met de veiligheid van de code? Een andere collega van mij had het ook over ob_start();

kan iemand me ervan over tuigen of header('location: blabla') veilig is?? en hoe zit het met ob_start()?

Acties:
  • 0 Henk 'm!

  • Blue_Thunder_NL
  • Registratie: Februari 2000
  • Laatst online: 15-09 20:31
Heb je het geprobeerd om include('menu.php') en include('login.php') in index.php om te draaien?

Ik wil zoveel, maar ik doe zo weinig


Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 22:39

_Sunnyboy_

Mooooooooooooooooo!

Persoonlijk gebruik ik ob_start() enzo alleen als ik sessions of headers moet inbouwen in een bestaand script en ik geen zin heb om dit volleidg om te bouwen. Met ob_start mag je namelijk wel overal je session_start() doen enzo omdat de output toch pas wordt gegenereerd bij ob_endflush()

Ik zou niet weten waarom header(Location) onveilig zou zijn. Het gebeurd allemaal serverside, en zolang je maar netjes zorgt dat waar deze header(Location) je heenstuurt maar niet niet te manipuleren is met parametertjes is het volgens mij prima veilig.

Met javascript en META-refeshes klooien zou ik in ieder geval niet doen, want die werken sowieso niet op alle browsers en kunnen door de gebruikers onderbroken worden.

Wat betreft veilig:
Sessies staan ook ergens in een cookie. Daar kan iemand mee klooien. Dus is een sessie wel veilig?
Je zou in je database het ip van de gebruiker kunnen opslaan samen met de session_id en dan checken of de gebruiker wel het ip heeft dat bij deze sessie hoort, maar je kan ip-adressen spoofen dus 100% is dat ook niet.

Bovendien wordt je pasword tenzij je https gebruikt unencrypted over het internet gestuurd (ook als je een javascript gebruikt om een md5 encryptie over het wachtwoord te halen kan iemand de md5 hash van het wachtwoord onderscheppen en gebruiken om in te loggen.

om het beter veilig te krijgen zou je eigenlijk de referer moeten checken (wordt de login-informatie wel vanaf mijn eigen login pagain verstuurd of zit iemand te hacken). Dit zou kunnen met $_SERVER['HTTP_REFERER'], alleen is het weer mogelijk op HTTP_REFERER te faken, dus dat is ook niet 100%

veilig is dus maar een relatief begrip B)

[ Voor 9% gewijzigd door _Sunnyboy_ op 23-10-2003 19:05 ]

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Acties:
  • 0 Henk 'm!

Verwijderd

[gokmodus] je hebt een cache probleem::

plaats onderstaande code bovenaan elke page
PHP:
1
2
3
4
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");                  // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");     // always modified
header ("Cache-Control: no-store, no-cache, must-revalidate");      // HTTP/1.1
header ("Pragma: no-cache");                                        // HTTP/1.0

[ Voor 17% gewijzigd door Verwijderd op 23-10-2003 19:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Blue_Thunder_NL schreef op 23 October 2003 @ 18:54:
Heb je het geprobeerd om include('menu.php') en include('login.php') in index.php om te draaien?
ja maar dat gaat niet omdat de layout van mijn code dan niet meer klopt, hij doet het dan wel gewoon dus...

mijn layout is opgebouwd uit tabellen, om bepaalde layout out put te krijgen gebruik ik een aantal
if{}else{} statements, dus voor beeld

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<? php
if(isset(check-waarde))
{
    echo "<table>.......";
    echo "......";
    echo "...";
    echo  "</table>";

    echo "<table>.......";
    echo "......";
    echo "...";
    echo  "</table>";
}
else
{
   echo "<table>.......";
    echo "......";
    echo "...";
    echo  "</table>";
}
?>


dus het is best vervelend om de hele layout te moeten gaan om gooien om de juiste resultaat te krijgen. Ik denk dat er een andere op;ossing moet bestaan.

maar goed voor nu in de ontwikkel fase doe ik het voorlopig met

PHP:
1
2
3
<? php
   header("lacation".$_SERVER['PHP_SELF']);
?>


om de gewenste resultaat te krijgen

tenzij iemand of ikzelf een bettere oplossing vindt, bedankt in ieder geval.

Acties:
  • 0 Henk 'm!

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Ik gebruik voor deze problemen een GET statement dus laat je form / link naar ./menu.php?time=8678678675342

en dan time in microsecondes bijvoorbeeld doen, je hoeft de GET zelf niet opgetehalen maar de pagina wordt wel als een nieuwe pagina van de server afgehaald :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
_Sunnyboy_ schreef op 23 oktober 2003 @ 19:03:

Wat betreft veilig:
Sessies staan ook ergens in een cookie. Daar kan iemand mee klooien. Dus is een sessie wel veilig?
...........................
..........................mogelijk op HTTP_REFERER te faken, dus dat is ook niet 100%

veilig is dus maar een relatief begrip B)
Thanks voor de tips, de meeste heb ik al geimplementeerd

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 23 October 2003 @ 19:09:
[gokmodus] je hebt een cache probleem::

plaats onderstaande code bovenaan elke page
PHP:
1
2
3
4
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");                  // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");     // always modified
header ("Cache-Control: no-store, no-cache, must-revalidate");      // HTTP/1.1
header ("Pragma: no-cache");                                        // HTTP/1.0
Het is geen cache probleem, UITLOGGEN GAAT GOED, Sessions worden netjes gedelete uit db en ge-destroyed na aanroep van "logout", dus dat is niet het probleem, maar die code kan ik inderdaad misschien wel gebruiken

Acties:
  • 0 Henk 'm!

  • Blue_Thunder_NL
  • Registratie: Februari 2000
  • Laatst online: 15-09 20:31
Verwijderd schreef op 27 October 2003 @ 08:22:
[...]


ja maar dat gaat niet omdat de layout van mijn code dan niet meer klopt, hij doet het dan wel gewoon dus...
Als dat alles is dan moet het niet zo moeilijk zijn toch? Een makkelijk oplossing is dan in dit geval dat je alle output van login niet rechtreeks echo'd maar in variabele opslaat en deze var pas echo'd nadat je menu.php geinclude hebt

Ik wil zoveel, maar ik doe zo weinig


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Even voor de duidelijkheid:
Sessies staan ook ergens in een cookie. Daar kan iemand mee klooien. Dus is een sessie wel veilig?
De gegevens in de sessie staan niet in een cookie, wat er wel in staat, mits je deze optie kiest, is de sessionid. Dit is echter gewoon een optie, dit kan eventueel ook via de url.

Verder lijkt het mij dat hier heel erg duidelijk de voordelen van templates naar voren komen. Daarmee zou je namelijk de wijzingen in de layout niet in je code op hoeven nemen.
Pagina: 1