Autor | Zpráva | ||
---|---|---|---|
Dero Profil * |
#1 · Zasláno: 10. 4. 2005, 20:44:25
Zdravím,
přímo k věci. Mám aplikaci chatu (PHP + MySQL). Informace o uživatelích jsou uloženy v instancích třídy User (objektech), které jsou předávány pomocí sessions. Tedy: class User { var $id; function User() { $this->id = // nejake cislo // } ... } $_SESSION['novy_user'] = new User; Problém je v tom, že pár lidem se při refreshi framu chatu ztratí uložená data v session (změní se SID a data nejsou přístupná). Respektive, data jsou přístupná pouze na těch prvních pár sekund poté, co vstoupí do chatu - po prvním refreshi jsou v čudu. Přitom ale v dolním framu (kde je textbox a submit), který se při odeslání zprávy také refreshuje, data zůstanou přístupná. Většině lidí to funguje normálně, někomu ale ne - setkal jste se někdo s něčím podobným? Refresh framu se zprávami se provádí každých 10 sec. pomocí meta. Vážně už nevím, vyzkoušel jsem všechno možné. Za každou radu moc děkuji! |
||
Pachollini Profil |
#2 · Zasláno: 10. 4. 2005, 22:23:21
Hádám, že se při refreshi framu ztratí údaj o session, pokud ho nemáš v cookie, protože při přechodu na další stránku se může předat buď uložený do cookie, nebo pomocí proměnné kterou PHP přidá pomocí do všech <a href>, formulářů etc.
Asi bych to řešil tak, že serverpři požadavku na stránku s chatem pošle 302 přesměrování na adresu, která bude obsahovat session ID a pak se IMHO při refreshi předá (přesměrování pošle samozřejmě jen tehdy, pokud session_id ještě nemá). |
||
Dero Profil * |
#3 · Zasláno: 11. 4. 2005, 17:37:51
Díky ... problém je v tom, že se sid (session_id) při refreshi mění (je tedy přístupný), avšak neodkazuje na data session. Pakliže předám staré sid, to stejné - žádná data. Tohle už mám vyzkoušené, s php mám zkušenosti, a tohle chování je poněkud ... extraordinární. :o) Bude v tom zašitý nějaký nepatrný háček - ale netuším, co by to mohlo být.
Když přecházím mezi stránkami v onom framu, sessions v pohodě ... ale při refreshi jak když utne. :o/ Opakuji, že pouze na některých strojích - třeba u mě v pohodě. Cookies na vině také nebudou, odzkoušeno. Zkoušel jsem: 1) Předávat staré sid pomocí cookies a url 2) session_write_close(); 3) ruční serializaci/deserializaci objektu v session |
||
Dero Profil * |
#4 · Zasláno: 11. 4. 2005, 19:12:32
Vyřešil jsem - situace a řešení:
hlavni.php obsahuje horni.php (refreshuje se pravidelně pomocí meta) a dolni (refresh při submitu) V hlavni.php <frameset> ... <frame name="horni" id="horni" src="./horni.php?sid=<?=session_id();?>" noresize="noresize" /> ... </frameset> V horni.php if ($_GET['sid']) session_id($_GET['sid']); session_start(); ... ... <meta http-equiv="refresh" content="10;url=http://server.cz/horni.php?sid=<?php echo $_GET['sid']; ?>" /> dolni.php v pohodě Díky za snahu, tuhle fintičku nechávám ostatním, je zákeřná. |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0