Op de een of andere manier lijkt IE niet echt blij te zijn met het gebruik van sessions. voor de site van mn stage opdracht gebruik ik sessions o.a. om de login gegevens te onthouden, in elke browser onthoud deze het prima, behalve in IE. die gooit de sessions er gewoon uit af en toe (kan er ook niet echt een patroon in vinden). weet iemand waar dit door veroorzaakt wordt en hoe ik dat kan oplossen of waar de fout zit?
op elke pagina include ik een file met als inhoud:
op de pagina's waar je voor ingelogged moet zijn roep ik deze functie aan:
het inloggen gebeurd door een formuliertje die dan naar deze file wordt gestuurd:
comments heb ik er expres in laten staat zodat te zien is wat ik al geprobeerd heb. ben er ondertussen al een aantal dagen mee bezig, maar kan maar geen oorzaak vinden.
op elke pagina include ik een file met als inhoud:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| ini_set("session.auto_start", "1"); if(!isset($_COOKIE['PHPSESSID'])){ $Cookie_ID = session_id(); setcookie("PHPSESSID", $Cookie_ID ); } if(isset($_COOKIE['sid'])){ session_id($_COOKIE['sid']); } else if(isset($_COOKIE['PHPSESSID'])) { session_id($_COOKIE['PHPSESSID']); } session_cache_expire(36000); session_set_cookie_params(36000); session_start(); /*if (!preg_match("/^[0-9a-z]*$/i", session_id())) { session_regenerate_id(); }*/ $_SESSION['uiform'] = ""; $_SESSION['maileracs'] = ""; header("Cache-control: private"); |
op de pagina's waar je voor ingelogged moet zijn roep ik deze functie aan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| global $cfg; if(isset($_COOKIE['sid'])){ $sid = $_COOKIE['sid']; } else if(isset($_COOKIE['PHPSESSID'])){ $sid = $_COOKIE['PHPSESSID']; } else { $sid = session_id(); } if(isset($_SESSION['hold'])){ $hold = $_SESSION['hold']; } else { $hold = session_id(); } if((isset($sid) && $sid == $hold) && isset($_SESSION['username']) && isset($_SESSION['password'])){ $mysql = new mysql($cfg['dbhost'], $cfg['dbuser'], $cfg['dbpass'], $cfg['db'], 0); $mysql->query("SELECT id FROM b4j_users WHERE username = '".$_SESSION['username']."' AND password = '".$_SESSION['password']."' ORDER BY id LIMIT 0,1 "); if ($mysql->num_rows() > 0) { return true; } else { return false; } } } |
het inloggen gebeurd door een formuliertje die dan naar deze file wordt gestuurd:
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
67
68
69
70
71
72
73
74
75
| <?php include_once("./classes/class.mysql.php"); include_once("config.php"); include_once("functions.php"); include("header.php"); $msg=""; $text = ""; if(!isset($_POST['user'])){ $msg .="je hebt geen gebruikersnaam opgegeven <br />"; } if(!isset($_POST['pass'])){ $msg .="je hebt geen password opgegeven <br />"; } $_POST['pass'] = rtrim($_POST['pass']); $mysql = new mysql($cfg['dbhost'], $cfg['dbuser'], $cfg['dbpass'], $cfg['db'], 0); $mysql->query(" SELECT id FROM b4j_users WHERE username = '".$_POST['user']."' LIMIT 0,1 "); if ($mysql->num_rows() == 0) { $msg .="De opgegeven gebruikersnaam is niet bekend in ons systeem <br />"; } $mysql->query(" SELECT id, lastlogin, username, password, type FROM b4j_users WHERE username = '".$_POST['user']."' AND password = '".md5(trim($_POST['pass']))."' LIMIT 0,1 "); if ($mysql->num_rows() == 0) { $msg .="De opgegeven combinatie van gebruikersnaam en wachtwoord is niet correct <br />"; } else { while ($mysql->movenext()) { $id = $mysql->getfield("id"); $username = $mysql->getfield("username"); $lastlogin = $mysql->getfield("lastlogin"); $password = $mysql->getfield("password"); $type = $mysql->getfield("type"); $hold = session_id(); session_register("id"); session_register("username"); session_register("lastlogin"); session_register("password"); session_register("type"); session_register("hold"); /*$_SESSION['id'] = $mysql->getfield("id"); $_SESSION['lastlogin'] = $mysql->getfield("lastlogin"); $_SESSION['username'] = $mysql->getfield("username"); $_SESSION['password'] = $mysql->getfield("password"); $_SESSION['type'] = $mysql->getfield("type"); $_SESSION['hold'] = session_id();*/ } //setcookie ("sid", session_id(),time()-3600); /*$set_cookie = setcookie ("sid", session_id(),time() + 36000000, "/2004/", ".born4jobs.nl", 0); if($set_cookie == false){ $text .= "inloggen mislukt, probeer het nog een keer"; include("template.php"); exit; }*/ update_login($id); if(eregi("route.php",$_SERVER['HTTP_REFERER'])){ $text .= "<meta http-equiv=\"Refresh\" content=\"0;url=".$_SERVER['HTTP_REFERER']."\">"; //header("location:".$_SERVER['HTTP_REFERER']); } if(eregi("view.php",$_SERVER['REQUEST_URI'])){ $text .= "<meta http-equiv=\"Refresh\" content=\"0;url=".$_SERVER['REQUEST_URI']."\">"; //header("location:".$_SERVER['REQUEST_URI']); } if(can_react()==FALSE){ $text .= "<meta http-equiv=\"Refresh\" content=\"1;url=ui.php\">"; //header("location:ui.php"); } else { $text .= "<meta http-equiv=\"Refresh\" content=\"1;url=index.php\">"; //header("location:index.php"); } } if(isset($msg)){ //$_SESSION['error'] = $msg; $error = $msg; session_register("error"); $text .= $msg; } include("template.php"); ?> |
comments heb ik er expres in laten staat zodat te zien is wat ik al geprobeerd heb. ben er ondertussen al een aantal dagen mee bezig, maar kan maar geen oorzaak vinden.