Autor Zpráva
Dero
Profil *
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
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 *
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 *
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á.
Toto téma je uzamčeno. Odpověď nelze zaslat.