ugrás a tartalomhoz

Setcookie() nem megy minden böngészővel?!

Anonymous · 2006. Okt. 31. (K), 18.08
Sziasztok!

Nézelődtem progresszíven, nem találtam hasonlót. (lehet hogy felületes voltam, akkor ezer bocs a főnöktől)

Egy oldalamon a júzert szeretném beléptetni. Ha belépett, akkor egy cookie-t beállítok. Így:
<?php
setcookie("webshop[email]", $email, time()+1800);
setcookie("webshop[usertype]", $usertype, time()+1800);
És ha a júzer megnyomja a 'belép' gombot, akkor visszadobja a login formot, tök üresen.

Totál véletlenszerűen megy ilyen-olyan böngészőkben. Mindenütt engedélyzve van a cookie használat.

Köszi!!!
 
1

hümm-hümm...

TeeCee · 2006. Okt. 31. (K), 18.53
... szoktam kezdeni, de most tényleg...
1.) Az, hogy beállítasz cookie-ba valamit, az oké. (Bár tudni illik, hogy a következő PHP-híváskor lehet majd megtalálni a tartalmát. Kerülúő út itt.)
2.) Definiáld légy szíves a sorrendet, mert ahogy írtad így néz ki: "Ha belépett egy cookie-t beállítok" -> "És ha a júzer megnyomja a 'belép' gombot"...
Hogy is van ez? Most belépett, vagy sem? A logikai vázát a scriptnek ha leírnád, lehet, hogy megtalálnád benne a hibát...
2

Igenis!! :)

Anonymous · 2006. Nov. 2. (Cs), 10.15
A következő a történés:
A júzer regisztrálta magát, meg már aktiválta is a profilját. Ez eddig OK, egy Mysql táblában benne ül.
Ekkor be kéne lépni:
Meg kell adni a júzernever (email-címet), a jelszót, meg hogy milyen típusú júzer (vevő vagy eladó).
A PHP ellenőrzi a jelszót, ha stimmel, akkor állítom be a cookie-t, és egyből irányítom át az júzert következő oldalra. (Header locationnel).
Szerintem ez OK, mert az esetek többségében működik Már olyanra is gondoltam, hogy belerakok egy sleep(1).et, hátha túl gyors a szerver...:)
Mégegy esetleges: Ha a cookie-t valamicookie[xyz]-ként adom meg, akkor az ISSET megtalálja vajon ISSET(valamicookie)-ként?
3

Melyik könyvtárra?

vbence · 2006. Nov. 2. (Cs), 10.48
Ha a PHP fájljaid (itt include-okra nem gondolok) több könyvtárban vannak elszórva. pl /login/login.php és /webshop/termek.php célszerű (mindig célszerű) az oldalad gyökerébe irányítani a cookie-kat, mert amúgy csak a cookie könyvtára alatt látszik.

setcookie("webshop[email]", $email, time()+1800, "/");

Így elsőre erre gondolok...
4

Ömlesztve

Nogee · 2006. Nov. 2. (Cs), 10.57
Sajnos minden ömlesztve van a gyökérben...
(Igaz, néha kigúvad a szemem, amig megtalálom, amit kell):)

Egyébként frankón néha működik...
Lehet, hogy ez az egész csak böngésző beállítás kérdése?
És akkor hogy köll kompatibilissá tenni?
Egyébként meg a www.neogallery.hu címen tekinthető...
5

Okuljunk

Nogee · 2007. Jan. 18. (Cs), 09.02
Azóta megvan a probléma.

Akár hiszitek, akár nem, ha setcookie-t használ az ember, és utána header(location)-nak mégy tovább, akkor elfelejti a cookie-kat.
Ez egy BUG!!
6

teszt eset?

Hodicska Gergely · 2007. Jan. 18. (Cs), 16.02
Szia!


Első körben kicsit kétkednék ebben az állításban. Tudsz esetleg egy teszt esetet mutatni, ahol egyértelműen kiderül ez a dolog? Csak azért gondolom, mert csinálunk hasonlót.


Üdv,
Felhő

u.i.: Mondjuk pont a napokban mi is belefutottunk egy elég érdekes dologba: bejelentkezés után ugye kap az illető egy új session id-t. Ez a login.php-ban megtörténik, majd amikor átirányítottuk a kezdő oldalra, akkor egy olyan hibaüzenetet kapunk, hogy már lejárt a sessionje. Headerek vizsgálatából kiderült, hogy az történik, hogy mielőtt belép, ott van neki a cookie a régi értékkel, ezután a login.php beállítja az újat, és az átirányítás következtében történő GET kérésben ott a Cookie header, és kétszer van benne a session_id. Ha jól gondolom, akkor ez valami fajta böngésző hiba kell legyen.
7

Nálam jól műxik a dolog ...

Max Logan · 2007. Jan. 18. (Cs), 16.08
Én egy nyelvválsztó modulban használom ezt:

<?php

 # Ha nyelválasztás történt a honlapon
 switch ( $_GET["change_lang"] )  
 {
    case "magyar" :
    {
      setcookie("site_lang", "magyar", mktime(0,0,0,1,1,2010));
      header("Location: $referer");
    }
    break;

    case "szlovak" :
    {
      setcookie("site_lang", "slovak", mktime(0,0,0,1,1,2010));
      header("Location: $referer");
    }
    break;

    case "cseh" :
    {
      setcookie("site_lang", "czeh", mktime(0,0,0,1,1,2010));
      header("Location: $referer");
    }
    break;
 }

?>
és nekem megjegyzi a cookie-t lévén, hogy a beállított nyelven jelenik meg az oldal.