[php] IE en sessions problemen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kroeske
  • Registratie: Mei 2000
  • Laatst online: 05-06 09:27
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:
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.

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Gebruik je IE 6? Dan moet je deze site even opgeven als trusted site in je cookie settings van IE. wellicht dat het daar aan ligt. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

  • kroeske
  • Registratie: Mei 2000
  • Laatst online: 05-06 09:27
RedRose schreef op 05 februari 2004 @ 12:47:
Gebruik je IE 6? Dan moet je deze site even opgeven als trusted site in je cookie settings van IE. wellicht dat het daar aan ligt. :)
het gaat niet alleen om mijn browser (gebruik ie 6 via wine, dus niet ideaal). maar bij andere mensen werkt het ook niet, en aangezien het een publieke site is, is dat niet echt de oplossing lijkt me.

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Ok, wat ik net lees op php.net:
If the timezone, or time for that matter on the server that php is on is not set properly, IE 6 for some reason will care about that and not set the cookie. Just something to look out for.

en:

With some browser IE 6.0, you can not put a cookie, if the serveur is not the server real name.
It s to solve the problem
if($_SERVER['HTTP_HOST']!=$_SERVER['SERVER_NAME'])
{header ("location:http://".$_SERVER['SERVER_NAME']." ".$_SERVER['REQUEST_URI']."");
exit();}

en:

21-Oct-2003 02:49
Cookies will not stored in IE6 if the server hostname
contains '_' (underscore).
I don't know if this applies to zone domain names too.
Examples are pc_smith, lp_smith, host_1.
En nog meer op: http://nl.php.net/manual/en/function.setcookie.php ;)

[ Voor 55% gewijzigd door RedRose op 05-02-2004 13:11 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • kroeske
  • Registratie: Mei 2000
  • Laatst online: 05-06 09:27
dank je, ik ga hier even op verder bouwen..

iemand enig idee waarom IE dit gedragt vertoont? (lijkt me niet helemaal correct namelijk)
[edit]
heb nu even gekeken en aan de hostname ligt het in ieder geval niet, die is correct. het zou dan nog aan de timezone kunnen liggen, maar dat lijkt me wel vreemd.

ik zag trouwens ook in de phpinfo() output dat php in CGI mode draait, zou het daar nog aan kunnen liggen?

[ Voor 53% gewijzigd door kroeske op 05-02-2004 13:21 ]