[PHP] $_SESSION, probleem bij laden van index na uitloggen

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 20-09 16:23

ReseTTim

Chocolate addicted

Topicstarter
Ik heb een website gemaakt met behulp van $_SESSION om userlevel en gebruikerid door te geven. zodat ik overal kan kijken of een gebruiker toegang heeft.

als ik uitlog via de uitlog knop de wordt de volgende pagina geladen.

logout.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
error_reporting(E_ALL); 
//start the session 
session_start(); 

//session variable is registered, the user is ready to logout 

$_SESSION['usrlvl'] = array();
$_SESSION['gebruikerid'] = array();
//$_SESSION['groep'] = array();

$_SESSION['usrlvl'] = "";
$_SESSION['gebruikerid'] = "";
//$_SESSION['groep'] = "";

echo "succesvol uitgelogd..";
echo '<html><head><meta http-equiv="refresh" content="1;url=http://www.*.nl"></head></html>';


deze pagina wordt dan verwezen naar dus de index. ik krijg nu in Fx de volgende melding:

De pagina verwijst niet op een juiste manier door
Firefox heeft vastgesteld dat de server het verzoek voor dit adres doorverwijst op een manier die nooit zal eindigen.
* Dit probleem kan soms worden veroorzaakt door het uitschakelen of weigeren
van cookies.

de index pagina die hij oproept begint als volgt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?      
error_reporting(E_ALL); 
session_start();

if (isset($_SESSION['gebruikerid'])){
header("Location:http://www.*.nl/algemeen.php");
} else {

require "con_/config.php"; 
        @mysql_connect($host, $userdb, $passdb) 
        or die("Unable to connect to SQL server"); 
        mysql_select_db($dbname);
        
?>


het ziet er naar uit dat hij dus in een loop ergens terecht komt.. ik snap er niks van, heb er naar gezocht @ php.net maar vind geen oplossing..

want volgensmij is session_unset en sesssion_destroy voor de session_register..

Mijn profiel - Te koop: Overzicht van spullen..


Acties:
  • 0 Henk 'm!

  • amoen
  • Registratie: Juni 2003
  • Laatst online: 30-06 22:13
code:
1
2
3
if (isset($_SESSION['gebruikerid'])){
header("Location:http://www.*.nl/algemeen.php");
} else {


moet je niet een spatie gebruiken na "Location: " ?

daarnaast, neem ik aan dat je deze code niet gebruikt op algemeen.php?
want dan blijft ie (als je een sessie hebt) vast zitten in een loop!

[ Voor 4% gewijzigd door amoen op 03-10-2006 10:11 ]

heeeeee ..... hoe is het?


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij "set" je bij logout je coockie op "", dat betekend volgens mij dus dat hij wel is geset maar leeg is...

Wat je dus kan proberen is bij je index pagina je if statement uitbreiden tot:

PHP:
1
2
3
if(isset($_SESSEION['gebruikersid']) && ($_SESSION['gebruikersid'] != "")) {
header....
}

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Je redirect naar algemeen.php, waar je de bezoeker waarschijnlijk weer terug stuur naar de index omdat deze niet is ingelogt; oneindige redirects.

In je logout script wil je het volgende doen;
unset($_SESSION['gebruikersid']);

Of in je index in plaats van isset() te gebruiken !empty() te gebruiken.

[ Voor 14% gewijzigd door frickY op 03-10-2006 10:13 ]


Acties:
  • 0 Henk 'm!

  • skabouter
  • Registratie: Oktober 2000
  • Laatst online: 20-08 08:55

skabouter

Skabouter

PHP:
1
2
echo "succesvol uitgelogd..";
echo '<html><head><meta http-equiv="refresh" content="1;url=http://www.*.nl"></head></html>';


Niet echt netjes (vast geen oorzaak van je probleem) om eerst text output te geven en daarna pas html ;)

Wat ik zelf doe om een sessie te destroyen is:
PHP:
1
2
3
4
5
6
7
$_SESSION = array();

if (isset($_COOKIE[session_name()])) {
   setcookie(session_name(), '', time()-1, '/');
}

session_destroy();

[ Voor 29% gewijzigd door skabouter op 03-10-2006 10:18 ]

[ Dislect ]


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 20-09 16:23

ReseTTim

Chocolate addicted

Topicstarter
amoen schreef op dinsdag 03 oktober 2006 @ 10:10:
code:
1
2
3
if (isset($_SESSION['gebruikerid'])){
header("Location:http://www.*.nl/algemeen.php");
} else {


moet je niet een spatie gebruiken na "Location: " ?

daarnaast, neem ik aan dat je deze code niet gebruikt op algemeen.php?
want dan blijft ie (als je een sessie hebt) vast zitten in een loop!
algemeen.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<? 
error_reporting(E_ALL); 
session_start(); 
    
require "con_/config.php"; 
        @mysql_connect($host, $userdb, $passdb) 
        or die("Unable to connect to SQL server"); 
        mysql_select_db($dbname);
        
//check to make sure the session variable is registered 
if (empty($_SESSION['gebruikerid'])){
header("Location:http://www.*.nl/index.php");
} else {


alle andere pagina's beginnen ook zo..

Mijn profiel - Te koop: Overzicht van spullen..


Acties:
  • 0 Henk 'm!

Verwijderd

BTW... ik vraag me nog even af hoe je je access verder hebt beveiligd aangezien het er uitziet alsof je toegangsbevoegdheid checkt op aanwezigheid van $_SESSION['gebruikersid']...

Heb trouwens mn vorige post even gevalideerd en de coockie blijft inderdaad staan wanneer je hem "slechts" op waarde "" zet. Overigens is een andere schrijfwijze die je kan proberen, om coockies "leeg te halen"

PHP:
1
setcookie("gebruikersid");

Acties:
  • 0 Henk 'm!

  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 14-09 19:35

Setragasj

is using radars to communicate

PHP:
1
$_SESSION['gebruikerid'] = "";

Hiermee is de sessie variable leeg, maar nog steeds geset.
Beter is dan om dit te doen:
PHP:
1
unset($_SESSION['gebruikerid']);


edit: veel te laat met mn reply..... Is al gezegd dus :o

[ Voor 14% gewijzigd door Setragasj op 03-10-2006 10:19 ]

<Typ een persoonlijk bericht>


Acties:
  • 0 Henk 'm!

  • amoen
  • Registratie: Juni 2003
  • Laatst online: 30-06 22:13
Setragasj schreef op dinsdag 03 oktober 2006 @ 10:18:
PHP:
1
$_SESSION['gebruikerid'] = "";

Hiermee is de sessie variable leeg, maar nog steeds geset.
en aangezien de TS op algemeen.php hetvolgende heeft staan:
if (empty($_SESSION['gebruikerid'])){
header("Location:http://www.mtenv-ip.nl/index.php");
} else {

zou het hierin kunnen zitten?

heeeeee ..... hoe is het?


Acties:
  • 0 Henk 'm!

  • skabouter
  • Registratie: Oktober 2000
  • Laatst online: 20-08 08:55

skabouter

Skabouter

amoen schreef op dinsdag 03 oktober 2006 @ 10:24:
[...]


en aangezien de TS op algemeen.php hetvolgende heeft staan:
if (empty($_SESSION['gebruikerid'])){
header("Location:http://www.mtenv-ip.nl/index.php");
} else {

zou het hierin kunnen zitten?
kort: ja

de variabele is nogsteeds geset, alleen met de waarde ""

[ Dislect ]


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 20-09 16:23

ReseTTim

Chocolate addicted

Topicstarter
Setragasj schreef op dinsdag 03 oktober 2006 @ 10:18:
PHP:
1
$_SESSION['gebruikerid'] = "";

Hiermee is de sessie variable leeg, maar nog steeds geset.
Beter is dan om dit te doen:
PHP:
1
unset($_SESSION['gebruikerid']);


edit: veel te laat met mn reply..... Is al gezegd dus :o
ach beter te laat dan nooit ;) heb die unset($_SESSION[]) gebruikt en werkt perfect..

Mijn profiel - Te koop: Overzicht van spullen..


Acties:
  • 0 Henk 'm!

  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 14-09 19:35

Setragasj

is using radars to communicate

Mooi. Dan beschouw ik dit topic als 'niet meer bekijken tenzij er nog reacties komen'.
Succes verder.

<Typ een persoonlijk bericht>


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Heb je rekening gehouden met de volgende situatie:

User A is ingelogd op zijn account.
Admin B verlaagt user A's accesslevel.

Wat gebeurt er nu met de rechten van A tijdens zijn sessie in jouw systeem?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • delyver
  • Registratie: Juli 2000
  • Laatst online: 24-08 15:55
Grijze Vos schreef op woensdag 04 oktober 2006 @ 10:51:
Heb je rekening gehouden met de volgende situatie:

User A is ingelogd op zijn account.
Admin B verlaagt user A's accesslevel.

Wat gebeurt er nu met de rechten van A tijdens zijn sessie in jouw systeem?
daarmee impliceer dat je vindt dat bij iedere nieuwe pagina die persoon A opent de acceslevel gecontroleerd wordt?
Ik doe altijd gewoon controleren bij inloggen.. Is dit zon verkeerde gedachte?

Audi A8 W12 6.0


Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
delyver schreef op woensdag 04 oktober 2006 @ 13:59:
Ik doe altijd gewoon controleren bij inloggen.. Is dit zon verkeerde gedachte?
* moozzuzz too.

Wel is er het (theoretisch) geval dat als je een "vervelende gebruiker" hebt, dat die z'n rechten pas afgenomen kunnen worden wanneer z'n sessie verloopt.

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Ik haal bij elke pageview de rechten van de gebruiker opnieuw op. In dat geval is altijd maar een refresh nodig om veranderingen door te invoeren.

Zo heb je inderdaad het probleem dan een ban van een gebruiker pas effect heeft bij de volgende sessie, en dan rechten die een gebruiker niet meer hoort te hebben ook pas verlopen bij een nieuwe sessie :)

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Morax schreef op woensdag 04 oktober 2006 @ 14:20:
Ik haal bij elke pageview de rechten van de gebruiker opnieuw op. In dat geval is altijd maar een refresh nodig om veranderingen door te invoeren.

Zo heb je inderdaad het probleem dan een ban van een gebruiker pas effect heeft bij de volgende sessie, en dan rechten die een gebruiker niet meer hoort te hebben ook pas verlopen bij een nieuwe sessie :)
Niet als je je sessiebeheer in een database doet. ;) Je kan de betreffende sessie gewoon "verwijderen" en de gebruiker is bij de volgende refresh uitgelogd.

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Ja, ik kan vanaf hier natuurlijk niet zien dat jullie sessies ook nog van afstand kunnen beeindigen. Neemt niet weg dat ik het beetje achterlijk vind om iemand remote uit te loggen als ik zijn rechten update :X

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 20-09 16:23

ReseTTim

Chocolate addicted

Topicstarter
Yo-han schreef op woensdag 04 oktober 2006 @ 14:55:
Niet als je je sessiebeheer in een database doet. ;) Je kan de betreffende sessie gewoon "verwijderen" en de gebruiker is bij de volgende refresh uitgelogd.
methode ala tweakers dus ;)
mmh is een idee..

gezien de gebruikers geen direct berichten kunnen nalaten op de website. dan alleen aan / afmelden voor bijeenkomsten. en bestanden kunnen uploaden maar die ook alleen zichtbaar zijn voor de beheerders / administrators maakt het in dit geval niet uit dat aan het begin van de sessie de userlevel wordt meegegeven.

want de beheerders / administrators zijn collega's van elkaar en gebruikers zijn mensen die voor het bedrijf in dienst zijn..

Mijn profiel - Te koop: Overzicht van spullen..

Pagina: 1