Het is heel erg vreemd. Ik dacht dat sessies altijd op de server werden opgeslagen en daardoor min of meer browser onafhankelijk zijn. Echter geeft Internet Explorer problemen bij bepaalde checks naar een sessie.
Het is als volgt: ik heb een user gedeelte waarvan in de constructor van de klasse ($plugin->user) onder andere wordt gekeken welk user level de gebruiker krijgt:
Nu is het probleem zo dat ik dikwijls met Internet Explorer browse op de TU, en een item in mn blog wil posten. Het user id wordt opgehaald van deze klasse: $plugin->user->id. Dat moet dus mijn user id zijn. Dus niet! De query geeft aan dat de variabele null is
In Firefox werkt alles echter perfect....
Wat kan hier fout aan zijn? Kan het zo zijn dat met een bepaalde policy bij de client $_SERVER en $_SESSION anders reageren? Het probleem doet zich voor bij zowel het bestaan van een cookie als het niet bestaan ervan. Wellicht dat het iets te maken heeft met deze reactie op php.net, maar zeker ben ik nog niet.
Ik zie wel dat ik ingelogd ben en kan ook afgeschermde pagina's bekijken. De sessie werkt volgens mij dan wel aangezien ik kijk of je ingelogd ben dmv deze functie:
Het is als volgt: ik heb een user gedeelte waarvan in de constructor van de klasse ($plugin->user) onder andere wordt gekeken welk user level de gebruiker krijgt:
PHP:
Een cookie is dus gezet wanneer de user ingelogd wil blijven. Een sessie wordt aangemaakt wanneer de user is ingelogd. De user heeft dan een level van < 100. Als er geen sessie bestaat is de user dus een gast en krijgt het level 100.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
| if($_COOKIE["sessionID"]){ //Cookie was set to stay logged in $_COOKIE["sessionID"] = mysql_real_escape_string($_COOKIE["sessionID"]); $result = $database->Execute("SELECT user_id, ip FROM plugin_user_session WHERE hash='".$_COOKIE["sessionID"]."'"); $result = $result->FetchRow(); if($result["ip"] == $_SERVER["REMOTE_ADDR"]){ $_SESSION["hash"] = $_COOKIE["sessionID"]; } } if($_SESSION["hash"]){ //Visitor is a user (and has already visited a page in this session) $result = $database->Execute("SELECT S.user_id, S.last_visit, U.name, U.level FROM plugin_user_session AS S, plugin_user_users AS U WHERE S.user_id = U.id AND S.ip='".$_SERVER["REMOTE_ADDR"]."' AND S.hash='".$_SESSION["hash"]."'"); if($result){ $result = $result->FetchRow(); $this->id = $result["user_id"]; $this->name = $result["name"]; $this->level = $result["level"]; $this->last_visit = $result["last_visit"]; }else{ $this->level = 100; } }else{ $this->level = 100; } |
Nu is het probleem zo dat ik dikwijls met Internet Explorer browse op de TU, en een item in mn blog wil posten. Het user id wordt opgehaald van deze klasse: $plugin->user->id. Dat moet dus mijn user id zijn. Dus niet! De query geeft aan dat de variabele null is
In Firefox werkt alles echter perfect....
Wat kan hier fout aan zijn? Kan het zo zijn dat met een bepaalde policy bij de client $_SERVER en $_SESSION anders reageren? Het probleem doet zich voor bij zowel het bestaan van een cookie als het niet bestaan ervan. Wellicht dat het iets te maken heeft met deze reactie op php.net, maar zeker ben ik nog niet.
Ik zie wel dat ik ingelogd ben en kan ook afgeschermde pagina's bekijken. De sessie werkt volgens mij dan wel aangezien ik kijk of je ingelogd ben dmv deze functie:
PHP:
1
2
3
4
5
| function user_logged_in(){ if($_SESSION["hash"]){ return true; } } |