Probleem met PHP Sessies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met een nogal vreemd probleem! Ik heb op een van mijn subdomeinen een pagina met daarop wat fotootjes. Ik heb daarvoor een login systeem geschreven met PHP sessies en daar komt het probleem!

Ikzelf heb nog nooit een probleem gehad met het inloggen op mijn site, ik heb dit in 4 verschillende browsers geprobeerd en het werkte in allemaal! (IE, Netscape, Opera, AOL, allemaal de nieuwste versies). Tevens hebben de meeste van mijn gebruikers er geen problemen mee!

MAAR, enkele (2) gebruikers krijgen steeds een error als ze proberen in te loggen! Ze vullen hun username/password in (die zijn correct, heb ik gecheckt) en dan krijgen ze het bericht dat ze succesvol zijn ingelogd, maar als ze dan naar de volgende pagina willen krijgen ze te zien dat ze niet zijn ingelogd!

Ik maak expres geen gebruik van cookies omdat sommige mensen die uit hebben staan. Zodra username/password klopt, maak ik een sessie variabele aan, en de waarde die ik daaraan geef is de sessie ID (zodat het elke keer anders is, bij elke login), vervolgens heb ik heel simpel op elke pagina na de regel session_start() een if statement dat controleert of de sessie ID overeenkomt met die variabele!

Werkt dus prima, zou je denken!

Het raarste is echter dat het bij sommige mensen eerst wel werkte, en nu opeens niet meer, terwijl ik nul komma nul aan de code heb gewijzigd!

Ik zit compleet vast, en snap het ook niet meer! Heeft iemand enig idee waar dit aan kan liggen? Alvast bedankt voor de moeite!

FxF

Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 10:51
Het lijkt een beetje op een probleempje dat ik ook soms heb als ik met Opera op een Blackboard site wil inloggen... mijn login/pass zijn 100% juist en toch weigert opera in te loggen. Dus misschien ligt het toch aan de browsers van je bezoekers?

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

  • Paradise
  • Registratie: Juni 2000
  • Niet online
En als ze die pagina refreshen na die pagina die zegt dat ze ingelogd zijn, staat er dan nog dat ze niét ingelogd zijn? Misschien is die pagina met 'niet ingelogd' in hun cache / proxy blijven steken..?

Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 17-09 21:27

pistole

Frutter

Verwijderd schreef op 13 March 2003 @ 02:45:
Ik maak expres geen gebruik van cookies omdat sommige mensen die uit hebben staan. Zodra username/password klopt, maak ik een sessie variabele aan, en de waarde die ik daaraan geef is de sessie ID (zodat het elke keer anders is, bij elke login), vervolgens heb ik heel simpel op elke pagina na de regel session_start() een if statement dat controleert of de sessie ID overeenkomt met die variabele!
Denk erom dat sessies ook worden bijgehouden d.m.v. cookies (zgn. session-cookies).

* pistole weet niet of dit geldt voor (apache/iis/*)+php, het is in ieder geval wel het geval bij iis+asp

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

  • Karalb
  • Registratie: September 2002
  • Laatst online: 15-03-2022
Ik heb hetzelfde probleem ook gehad. Als ik bij mijn ISP de hostname op het type URL Frame stond werkte sessions af en toe wel en af en toe niet. Ik heb de hostname nu op het type URL Redirect staan. Nu werkt het zonder problemen.

Ik weet echter nog steeds niet hoe sessions goed kunnen werken binnen een URL Frame. Wel iets waar ik naar toe wil.

P4 2400MHZ | MSI 845PE Max2 | 512DDR pc2700 Samsung | 2x Maxtor 25GB | Asus Geforce 4 4200Ti 128MB


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
pistole schreef op 13 March 2003 @ 08:30:
[...]

Denk erom dat sessies ook worden bijgehouden d.m.v. cookies (zgn. session-cookies).

* pistole weet niet of dit geldt voor (apache/iis/*)+php, het is in ieder geval wel het geval bij iis+asp
Het is client-side, dus onafhankelijk van welke webserver je draait.

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 17-09 21:27

pistole

Frutter

Rotjeknor schreef op 13 March 2003 @ 08:41:
[...]

Het is client-side, dus onafhankelijk van welke webserver je draait.
je snapt niet wat ik bedoel. Als die clients cookies hebben uit staan, dat is het dus mogelijk dat hun sessie daarom niet werkt.

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 17-09 14:46

TheDane

1.618

pistole schreef op 13 maart 2003 @ 09:16:
[...]

je snapt niet wat ik bedoel. Als die clients cookies hebben uit staan, dat is het dus mogelijk dat hun sessie daarom niet werkt.
als 't goed is, wordt de sessie id dan gewoon achter je url geplakt,.

misschien dat 't dan (inderdaad) aan de webserver ligt om dit goed door te geven aan je php instantie ...

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Als het ie6 is, laat ze dan ook even naar hun security settings kijken. Al meerdere keren meegemaakt dat deze hoog stonden en dat leverde zelf fout op als hier beschreven, toen deze site als intranet gemarkeerd ( wat het ook was ) en het werkte weer perfect.

Acties:
  • 0 Henk 'm!

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 09:27

Beekforel

Is eigenlijk geen vis

Ik heb het soms ook bij een paar van mijn CMS'en, en ik geeft de cache meestal de schuld. Soms helpt het om de pagina gewoon te refreshen, en anders moet ik nog een keer inloggen.
Je kunt met headers aangeven dat de pagina niet in de cache komt dacht ik, maar ik weet even niet meer hoe :P

offtopic:
Dit was post 1111 voor mij, omdat ik post 1000 gemist heb, vanavond een feestje!

[ Voor 17% gewijzigd door Beekforel op 13-03-2003 10:04 ]


Acties:
  • 0 Henk 'm!

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 05-04 18:06

[ash]

Cookies :9

Zet cookies eens aan, dan zal je zien dat erg geen 'cookie' wordt gemaakt, maar de sessie wordt wel vast gehouden in een zogenaamde 'session-cookie'. Ben je meteen van die lelijk sessie-id's in je URL's af.

[ Voor 21% gewijzigd door [ash] op 13-03-2003 10:04 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In de URL wordt momenteel de sessie ID niet doorgegeven, en ook niet via cookies, mijn firewall blokkeert alle cookies en ik kan prima inloggen! De gebruikers die de problemen hebben, hebben IE5 en IE6 geprobeerd. Waar ik zelf ook nog aan moest denken gister, was het volgende.

De pagina die controleert of je username/pass correct is, geeft na de controle een pagina weer met daarop een JavaScript redirect, zou het misschie uitmaken als ik die redirect wat meer vertraag, dus dat het langer duurt voordat die persoon wordt doorverwezen naar een andere pagina?

Acties:
  • 0 Henk 'm!

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 05-04 18:06

[ash]

Cookies :9

Een firewall die cookies blokkeert :? een firewall bevindt zich op het IP niveau (weet ff niet welke ISO lagen dit zijn) en zeker niet in de applicatie laag waar je browser zit.

Hoe wordt bij jouw die sessie dan doorgegeven, controlleer anders of er niet toevallig een nieuwe sessie wordt aangemaakt zodra je via het JavaScript geredirect wordt.

Heb zelf ook een site draaien waarbij ik gebruik maak van sessies, en niemand heeft bij mij problemen. Heb alles default staan, dus sessies met zogenaamde session-cookies.

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Wat ook een reden kan zijn is dat deze gebruikers achter een proxy server zitten.
Heb hier ook al eens problemen mee gehad.
Ja ik weet het, officieel mag een proxy geen .php (ea) files zomaar cachen, maar ja, het is niet altijd zoals het is :(
Wat je eens zou kunnen proberen is aan de url waarnaar je redirect een 'dummy=time();' toe te voegen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
een proxy zou inderdaad het probleem kunnen zijn, daar was ik nog niet opgekomen, ik ga het eens uitzoeken.

Wat betreft de firewall, die kun je zo configureren dat hij simpelweg alles blokkeert wat van en naar mijn pc wordt verstuurd, dus ook cookies lijkt mij. :)

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
uit de manual:
session.use_trans_sid boolean
session.use_trans_sid whether transparent sid support is enabled or not. Defaults to 0 (disabled).

Opmerking: For PHP 4.1.2 or less, it is enabled by compiling with --enable-trans-sid. From PHP 4.2.0, trans-sid feature is always compiled.

URL based session management has additional security risks compared to cookie based session management. Users may send an URL that contains an active session ID to their friends by email or users may save an URL that contains a session ID to their bookmarks and access your site with the same session ID always, for example.
Kijk daar eens naar.
Ik ben overigens wel benieuwd naar de uitkomst. Ik heb namelijk zelf problemen op een server waarbij het aan staat maar toch niet in de url wordt doorgegeven
Hier is mijn post daar over:
[rml][ php] session: blijf niet ingelogd als cookies uit staan[/rml]
Helaas schijnt niemand het antwoord te weten

Acties:
  • 0 Henk 'm!

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 05-04 18:06

[ash]

Cookies :9

Als je middels je header ervoor zorgt dat de pagina altijd 'expired' is, mag een proxy niet het probleem zijn.

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Ja ik weet het, officieel mag een proxy geen .php (ea) files zomaar cachen, maar ja, het is niet altijd zoals het is
Als je middels je header ervoor zorgt dat de pagina altijd 'expired' is, mag een proxy niet het probleem zijn.
Tja, dat is de theorie, in praktijk al andere dingen meegemaakt, zelfs met een extra ' dummy=time(); ' waarde in de querystring |:( :X :?
En dat bij een van nederlands grootste bedrijven..... :(

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nogmaals navraag gedaan bij de desbetreffende personen, en ik kon er niet wijzer van worden. Ik heb dus maar besloten om mijn script te herschrijven en naast de sessies OOK cookies te gebruiken... het zij zo! Als iemand nog met een oplossing kan komen, ik hoor het graag!

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 14 maart 2003 @ 01:57:
een proxy zou inderdaad het probleem kunnen zijn, daar was ik nog niet opgekomen, ik ga het eens uitzoeken.

Wat betreft de firewall, die kun je zo configureren dat hij simpelweg alles blokkeert wat van en naar mijn pc wordt verstuurd, dus ook cookies lijkt mij. :)
Wat is een firewall en wat doet hij is een vraag die jij ook mag stellen ;)
Een firewall blockt geen koekjes, zonealarm kan dat wel, en nog meer van dat soort tooltjes, maar dat vind ik firewall's voor mietjes(nofi).

Zorg gewoon dat je een sessie opent, en de pagina ALTIJD de goeie headers bevat(pragma: no-cache, en meerdere no-cache headers), ook moet een pagina al verlopen zijn dan cached de router hem ook niet.

Bij een sessie moet je 1 van de 2 dingen gebruiken(gaat automatisch):
• SESID in je url, dan krijg je een url als file.php?SESID=ASD807ASFGAFS7GS7
• koekje, deze zet hij zelf als hij deze kan zetten, kan hij hem niet zetten dan geeft hij ALTIJD een sesid in de url.

kan je een stukje van je source posten? dan kunnen we mischien de fout zien.
dus het stukje waar je de sessies opent/sluit en kijkt of er al een loopt(zoja dan ben je ingelogged).

[edit]
Probeer ook eens te redirecten via de volgende header ipv een javascriptje:
PHP:
1
Header("Location: http://www.kingofdos.com");

[ Voor 6% gewijzigd door Verwijderd op 17-03-2003 09:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat betreft ZoneAlarm en andere firewalls 'voor mietjes', ik gebruik Sygate en die blokkeert ook cookies, verder heb ik geen router (hardwarematige firewall) want ik heb er geen geld voor en ik heb een laptop die ik overal mee naartoe sjouw, en dan ga ik niet ook nog eens een router meesjouwen voor het geval ik ergens het internet op ga... maar dat terzijde.

Ik heb geprobeerd om een login systeem met cookies en sessies te maken, maar ik doe ergens iets verkeerd en ik heb me al helemaal suf gezocht, maar kan de fout niet vinden.

Hier de code

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php

session_start();

if(!isset($_COOKIE[userid]) && $_POST[action] == "login") {

    $sql_user = db_query("SELECT * FROM users WHERE username='".$_POST[username]."' && password='".md5($_POST[password])."'");
    $user = mysql_fetch_assoc($sql_user);
    
    if(!mysql_num_rows($sql_user)) {
        $var = "Invalid username or password!";
        eval("\$var .= \"".loadTemplate("login")."\";");
    }

    else { 
        
        // Store info in cookie and session variables
        $secret = "geheimpie";
        $hash = md5($user[username].$user[id].$user[email].$secret);
        setcookie("userid", $user[id], time()+3600, "/", "", 0);
        setcookie("session", session_id(), time()+3600, "/", "", 0);
        setcookie("value", $hash, time()+3600, "/", "", 0);
        
        session_register('poweruser'); $poweruser = "poweruserok";
        session_register('userid'); $userid = $user[id];
        session_register('username'); $username = $user[username];
        
        // Make sure the page refreshes
        echo "<html><head><meta http-equiv='refresh' content='3,URL: ".$_SERVER['PHP_SELF']."?id=".$_GET['id']."'></head></html>";
        exit;
        
    }

}
elseif(isset($_COOKIE[userid]) && $_POST[action] == "logout") { 
    
        setcookie("userid", "", time()-3600, "/", "", 0);
        setcookie("session", "", time()-3600, "/", "", 0);
        setcookie("value", "", time()-3600, "/", "", 0);
        session_destroy();
        
        // Make sure the page refreshes
        echo "<html><head><meta http-equiv='refresh' content='3,URL: ".$_SERVER['PHP_SELF']."?id=".$_GET['id']."'></head></html>";
        exit;
        
        
}
elseif(!empty($_COOKIE[userid])) {
    
    $secret = "geheimpie";
    $sql_user = db_query("SELECT * FROM users WHERE id='".$_COOKIE[userid]."'");
    $user = mysql_fetch_assoc($sql_user);
    
    $hash = md5($user[username].$user[id].$user[email].$secret);
    
    if($hash == $_COOKIE[value]) eval("\$var = \"".loadTemplate("logout")."\";");
    else {
        $var = "Please don't tamper with the cookie!";
        eval("\$var .= \"".loadTemplate("login")."\";");
    }
}
else { eval("\$var = \"".loadTemplate("login")."\";"); }

show_output($var);

?>


Het probleem is dat wat ik ook probeer de sessievariabelen die geset worden zodra iemand succesvol inlogt, niet blijven bestaan! Ik heb al geprobeerd om nadat de sessie gestart is te kijken of er reeds een session_id aanwezig was in het cookie en die te vergelijken met de huidge sessie_id, indien ze niet overeenkomen de huidge sessie vernietigen en een nieuwe openen met de sessie_id uit het cookie, maar ook dan zijn de variabelen niet beschikbaar!

Heeft iemand enig idee waar hier de fout zit? Apache is goed geconfigureerd voor sessies, het eerder in deze thread besproken script werkt bij mij namelijk wel prima, bovendien heb ik het script ook op mijn betaalde host geprobeerd en daar heb ik exact hetzelfde probleem...

Suggesties??

[ Voor 49% gewijzigd door Verwijderd op 18-03-2003 00:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

inloggen:
PHP:
1
2
session_set_cookie_params ( time()+$koekdagen , "" , ".ccmod.com" ); 
session_register("CCModUserISInLogged");


uitloggen:
PHP:
1
2
session_unset();
session_destroy();


kijken of je bent ingelogd:
PHP:
1
if (session_is_registered("CCModUserISInLogged")) { $lgn=1; } else { $lgn=0; }


begin iedere pagina:
PHP:
1
session_start();


zie de 1000 tuts @ inet, gewoon een session goed crieren, de koekies hoef jij niet naar te kijken dit moet je regelen met session systeem(dus niet via $_COOKIE)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Van de PHP website:
rick at zix dot nu
25-Jan-2001 03:36

If you want your login session to last longer, you should log the sessionid in a cookie and before you start your session you should load that sessionid from the cookie like this:

PHP:
1
2
3
session_id($cookiesession); 
session_start();
etc
Dit probeer ik dus te bereiken! Juist vanwege het feit dat reeds is gebleken dat ALLEEN sessies niet voldoende zijn, wil ik wat extra info in een gewoon cookie opslaan, dus NIET alleen in een sessie cookie...

Het probleem is dan ook niet dat ik mijn cookie niet kan uitlezen, maar dat ik alle sessie variabelen niet kan uitlezen!

[ Voor 16% gewijzigd door Verwijderd op 18-03-2003 05:11 ]


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
je kan ook instellen dat ehet sessiecookie langer houdbaar is, dit is ook 'maar' gewoon een gebruiker die zijn idee lucht op php.net site dus hoeft het niet dé manier te zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed, ik zal het NOG een keer uitleggen, sessies ALLEEN zijn NIET VOLDOENDE, omdat een aantal van mijn gebruikers NIET kan inloggen, dus ik wil GEWONE cookies gebruiken als EXTRA om ervoor te zorgen dat als de SESSIE niet blijft bestaan dat de gebruiker TOCH geidentificeerd kan worden aan de hand van het COOKIE! Beter zo?

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
Als een gebruiker geen cookie's ondersteunt ben je dan nog nergens :?

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 13 maart 2003 @ 20:52:
In de URL wordt momenteel de sessie ID niet doorgegeven, en ook niet via cookies, mijn firewall blokkeert alle cookies en ik kan prima inloggen! De gebruikers die de problemen hebben, hebben IE5 en IE6 geprobeerd. Waar ik zelf ook nog aan moest denken gister, was het volgende.
Dat is eenvoudigweg niet mogelijk. De server kan jou (bij mijn beste weten) maar op twee manieren herkennen:
1. het sessie_id zoals die in de url wordt meegegeven
2. het sessie id zoals ie in je cookie zit

een andere manier is niet mogelijk. Als ie niet in de url wordt meegegeven zit ie toch echt in een cookie opgeslagen volgens mij. Controleer het nog maar eens.
Dus je loginscript herschrijven naar een cookie-gebaseerd iets zal niet helpen - dan kunnen dezelfde gebruikers nog steeds niet inloggen.
Pagina: 1