[php] cookies werken niet in ie7

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
Ik ben bezig met een klein inlog systeem waarbij met cookies moet worden onthouden wie er ingelogt is, maar dit werkt nog niet helemaal. In firefox en ie6 werkt alles wel perfect, maar in ie7 niet.

Als je ingelogt wordt, komt er het volgende te staan:

PHP:
1
2
3
4
5
if(!empty($_POST['login'])) {
setcookie("logged",$memberid,time()+3600);
header("Location: index.php");
exit();
}


En dan op de beveiligde pagina:

PHP:
1
2
3
if(empty($_COOKIE['logged'])) {
showerror("Niet ingelogt!", "Log eerst in om dit te doen!");
}


functie showerror() echo't simpel de fout, en dat gebeurt er dus nadat er ingelogt is met ie7.

Verder gebruik ik dacht ik hetzelfde systeem voor cookies met een forum, en daar werkt het wel gewoon bij. Dus wat is hier dan fout aan???

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Of het nu werkt of niet, dit is sowieso een beetje slorig. Je hoort isset() te gebruiken:

PHP:
1
2
3
4
5
6
7
8
9
if (isset($_POST['login']) && $_POST['login'] != '') {
setcookie("logged",$memberid,time()+3600);
header("Location: index.php");
exit();
}

if (!isset($_COOKIE['logged'])) {
showerror("Niet ingelogt!", "Log eerst in om dit te doen!");
}

[ Voor 15% gewijzigd door XWB op 11-06-2006 13:25 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
nee, dat is het probleem niet. Want die header("Location: etc) pakt hij wel. Hij komt daar dus wel, alleen gaat er dus iets fout met de setcookie. Ik heb trouwens niet gekeken of die zo'n cookie neerzet. Waar gebeurt dat met ie7? Is dat anders dan met ie6? want kan ze namelijk niet vinden :)

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • [BoSS]
  • Registratie: Maart 2000
  • Laatst online: 14:36

[BoSS]

Geen woorden maar daden!

Accepteert IE7 misschien alleen cookies van "allowed domains"? Het zou niet zo best zijn, maar het zou best zijn dat IE7 cookies van "unknown domains" blokkeert...?

20x 170 Wp (Solar Frontier) op ZZO / 54 graden


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Tha Ertenal schreef op zondag 11 juni 2006 @ 13:28:
nee, dat is het probleem niet. Want die header("Location: etc) pakt hij wel. Hij komt daar dus wel, alleen gaat er dus iets fout met de setcookie. Ik heb trouwens niet gekeken of die zo'n cookie neerzet. Waar gebeurt dat met ie7? Is dat anders dan met ie6? want kan ze namelijk niet vinden :)
Maar je moet wel met isset() kijken of een variabele wel geset is.

Dus

PHP:
1
if (!empty($_POST['login']))


is fout. Het moet zo:

PHP:
1
if (isset($_POST['login']))


Zet anders error_reporting(E_ALL); maar eens bovenaan je script.

[ Voor 49% gewijzigd door XWB op 11-06-2006 13:35 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hacku: empty doet hetzelfde als isset, en controleert daarbij nog even of een variabele een "empty" waarde heeft. Empty gebruiken in plaats van isset is dus op zich niet fout. :)

Verder weet ik ook niet wat er mis is. Het ziet er op zich goed uit. IE7 is trouwens nog steeds betasoftware, dus je kan je site daar wel compatible op maken; dat betekent nog niet dat het ook straks nog hetzelfde werkt. Ik zou de moeite nog niet nemen om bij afwijkend gedrag toch IE7 al te gaan supporten. Grote kans dat je het voor niks doet.

offtopic:
Ingelogd schrijf je met een d.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Hacku: empty doet hetzelfde als isset, en controleert daarbij nog even of een variabele een "empty" waarde heeft. Empty gebruiken in plaats van isset is dus op zich niet fout.
Zo, dat is nieuw.
Dus

PHP:
1
2
3
4
if (!empty($_POST['test']))
{
    echo 'test';
}


is hetzelfde als

PHP:
1
2
3
4
if (isset($_POST['test']) && $_POST['test'] != '')
{
    echo 'test';
}


?

// edit

empty() beschouwt $var = '0'; ook als leeg, niet altijd handig.

[ Voor 19% gewijzigd door XWB op 11-06-2006 13:45 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
mjah, daar dacht ik inderdaad ook aan, maar ik gebruik zelf ie7 omdat ik em handiger vind dan ie6 (zonder troep in de balken, en eindelijk meerdere tabbladen :))

En dat van dat empty en isset is inderdaad hetzelfde alleen andersom, maar dat werkt wel goed. Daar kan de fout niet liggen, want wat binnen de if() zit werkt gewoon.

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Tha Ertenal schreef op zondag 11 juni 2006 @ 13:40:
mjah, daar dacht ik inderdaad ook aan, maar ik gebruik zelf ie7 omdat ik em handiger vind dan ie6 (zonder troep in de balken, en eindelijk meerdere tabbladen :))
Tsja, je kan je site nou wel compatible maken, maar als straks blijkt dat dit gedrag een bug is, dan heb je een site compatible gemaakt met een bug en kun je het weer terug gaan wijzigen als die bug eruit is. Weinig zinvol IMO.
En dat van dat empty en isset is inderdaad hetzelfde alleen andersom, maar dat werkt wel goed.
Dat is ook weer niet helemaal waar. Empty doet meer. :)
Example 1. A simple empty() / isset() comparison.
PHP:
1
2
3
4
5
6
7
8
9
10
11
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
   echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
   echo '$var is set even though it is empty';
}
:)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
ja das waar :). foutje van mij :D

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Probeer bij 'setCookie' ook eens de rest van de parameters op te geven. Het kan best zijn dat ie7 verplicht een domein wil hebben.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Stamgastje
  • Registratie: April 2003
  • Laatst online: 02-02-2020
Probeer dit eens toe te voegen:
code:
1
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Tha Ertenal, je script doet het hier perfect in IE7 beta 2. Misschien eens de instellingen van je browser checken?

[ Voor 60% gewijzigd door XWB op 11-06-2006 14:07 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
Nou, ik zat al te kijken in de internet options, maar kon het niet vinden. (heb btw wel de cookies gevonden nu). Maar als het in ie7 uitgeschakeld staan kon ik bijvoorbeeld ook niet op dit forum ingelogt blijven!

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Hoe ziet je form eruit? Doe anders eens

PHP:
1
print_r($_POST);


Als die leeg is worden de waarden in je formulier niet verzonden.

[ Voor 31% gewijzigd door XWB op 11-06-2006 14:07 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
nee dat heeft er niks mee te maken, kijk:

if(!empty($_POST['login'])) {
setcookie("blabla");
echo "hoi";
}

dan echo't ie wel hoi. De code zit al in de if()

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Hm, hier werkt het toch. Doe anders eens wat Janoz zei: de rest van de parameters opgeven.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Stamgastje
  • Registratie: April 2003
  • Laatst online: 02-02-2020
Heb je al geprobeerd de header toe te voegen (zie vorige post van mij)? Op een andere site lostte dat de inlogproblemen op (in IE6 - Firefox en Opera werkten toen ook zonder problemen). Het kan namelijk zo zijn dat je de security settings in internet explorer te hoog hebt staan waardoor cookies niet meer opgeslagen worden. Door het meesturen van deze header los je dat op.

Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
na de header en de extra parameters toegevoegt te hebben werkt het nog steeds niet in ie7 (nog steeds wel in ie6 en firefox)

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

P3P header is voornamelijk van belang als je pagina bijvoorbeeld in een frame van een ander domein geinclude wordt.
Wat heb je precies ingevuld als extra parameters?
Heb je ook al geprobeerd of het wel werkt als je de Location-header tijdelijk uitschakeld en/of daar een volledig URL opgeeft (conform HTTP spec)?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
nee, werkt ook niet. ik heb de header() weg gehaald, maar gaf nog steeds probleem.

Misschien is het gewoon een bug dan, en moet ik me er niks van aantrekken. Ik zal wel op de site zetten dat het met ie7 niet werkt ofzo.

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Is het niet verstandiger, om te controleren of $memberid leeg is of niet?
Als ik nu bijvoorbeeld $_POST['login'] post, met een of ander programma'tje of zo of weet ik veel wat...
Dan verstuurd ie dus altijd het cookie... Dan lijkt het me dus, dat het minder secure is...

$memberid krijgt pas (mag ik hopen althans) als je je query hebt gedraaid en $memberid de waarde van de memberid uit die query hebt gekregen... ;)

Lijkt mij veel veiliger dan je nu gemaakt hebt... :)
Tha Ertenal schreef op zondag 11 juni 2006 @ 14:38:
nee, werkt ook niet. ik heb de header() weg gehaald, maar gaf nog steeds probleem.

Misschien is het gewoon een bug dan, en moet ik me er niks van aantrekken. Ik zal wel op de site zetten dat het met ie7 niet werkt ofzo.
Zoals eerder gepost, is er dus geen probleem met IE7 beta 2... Weet niet welke versie jij hebt, maar als je IE7 beta 2 niet hebt, kan je jouw IE7 updaten en het dan nogmaals proberen... Als hij dan ook bij jou werkt, is het toch ook goed? ;)

[ Voor 39% gewijzigd door CH4OS op 11-06-2006 14:41 ]


Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
Nee, met het inloggen moet een persoon een gebruikers naam en wachtwoord invullen, en in de if() staat ook een query die controleert of dat klopt, en dan het member id eruit haalt. Hier is de hele if():

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            if(!empty($_POST['login'])) {

                $mquery = $db->query("SELECT id FROM ".$prefix."profiles WHERE username='".addslashes($_POST[username])."' && password='".md5(addslashes($_POST[password]))."'");
                if($db->rows($mquery) == 0) {
                    showerror("(Nick)naam / Wachtwoord fout!", "Deze combinatie van (nick)naam en wachtwoord bestaat niet in onze database!");
                }

                $mresult = $db->fetch($mquery);
                setcookie("logged",$mresult['id'],time()+3600,"/~ertenal/friendslan/","83.149.96.173",0);
                header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
                header("Location: module.php?pl=lan&action=bewerkinschrijvingen");
                exit();

            }


En ik heb idd ie7 beta 2, maar blijkbaar is er een stukje code fout wat niet met de if en setcookie te maken heeft wat ik net zei. ik probeer nu ff of het mij met een simpele versie van de code wel lukt om een cookie te creëren.

~ en dit werkt helaas niet met de volgende code :(:

PHP:
1
2
3
4
5
6
<?
setcookie("logged","1",time()+3600,"/~ertenal/friendslan/","83.149.96.173",0);
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
// header("Location: module.php?pl=lan&action=bewerkinschrijvingen");
exit();
?>

[ Voor 43% gewijzigd door Tha Ertenal op 11-06-2006 14:46 ]

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Hier stond onzin, las de code niet goed... :/

[ Voor 147% gewijzigd door CH4OS op 11-06-2006 15:17 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Ik weet niet hoe je test, maar ik neem aan dat al je pagina's vallen onder http://83.149.96.173/~ertenal/friendslan/ en dat dat een remote host is waarop je test (dus niet dat je zelf bijvoorbeeld op http://localhost/ zit te testen).
Verder is je cookie maximaal een uur geldig; check dus ook of je servertijd goed staat, de tijd van je client goed staat en dat ze beide dezelfde timezone gebruiken

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Solopher
  • Registratie: December 2002
  • Laatst online: 11-09 14:55
Ik zelf heb een soort gelijk probleem gehad, in firefox en alle andere internet browsers deden cookies het goed behalve in IE7.
Ik heb mijn probleem opgelost door het zetten van een cookie path, nu werkt het wel goed.

Hopelijk lost dit het probleem bij jou ook op.
Hoe het werkt in je in de manual van php lezen:
http://nl3.php.net/manual/en/function.setcookie.php

Acties:
  • 0 Henk 'm!

  • Tha Ertenal
  • Registratie: September 2002
  • Laatst online: 31-05-2022
mjah, dat heb ik dus gedaan. Maar dat werkt nog steeds niet.

AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450

Pagina: 1