Diskuze: Ako nastaviť automaticky status offline usera po zavreti okna prehliadača?
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Kdyby jsi tohle aplikoval na nějaký web tak bych tam moc dlouho nezůstával. protože přihlašovat se pokaždé po tom co zavřu okno a za 3 sekundy ho zase otevřu se mi moc nechce.. Pokud chceš mít nějaký offline/online status tak stačí to mít udělané úplně jednoduše že budeš mít prodlevu na online a offline a bude to pouze o expiraci session (čas potom co uživatel je neaktivní si můžeš nastavit).
web presunul na url stranku odhlasenia s unset($_SESSION['user']);
Podle mně je ještě horší nápad ale docílit aby se po zavření okna redirectlo na nějakou jinou stránku (myslím že to možná ani nejde, jelikož prohlížeč si vynutí zavření) ale prostě když uživatel klikne na křížek tak to má fungovat jako křížek.
Kdybych viděl něco takovéto na webu, tak tam moc dlouho nezůstanu, pokud si ale myslel po zavření prohlížeče tak to se dá něco takového udělat pomocí websocketů (aspoň myslím) že budeš komunikovat s prohlížečem do té doby než se nevypne (ale zase nevím jak to je s podporou u prohlížeču a nebo jestli to tak vůbec funguje, ale mělo by to jít.)
No, evidentne jsi nepochopil problemy, ktere jsem zminoval v tech starych
tematech.
Jedine skutecne dobre pouziti tehle udalosti jsem videl pri editaci. Uzivatel
neco edituje, neklikne ulozit, vykrizkuje okno a to ho upozorni, ze neulozil,
jestli opravdu chce okno zavrit.
Ve Firefoxu to funguje od verze 1.
https://developer.mozilla.org/…unload_event
Otvorený Zdroj:31.10.2019 13:19
protože přihlašovat se pokaždé po tom co zavřu okno a za 3 sekundy ho zase otevřu se mi moc nechce..
Tak logika hovori, ze ked zavrem co i len kartu, tak tam asi nechcem byt , a keď znovu otvoris web, zase
musis nieco natukat..tak natukas aj prihlasenie:-), zdrhat sa nevyplati
..ani auto nenechas neuzamknute,
ked zavres dvere, nenastavujes mu expiracnu dobu kedy sa ma samo zavret.
bude to pouze o expiraci session,
podla problematiky aspon viem ze tie statusy nebudu potom uplne hodnoverne, ak sa nepouzije websocket....
Ale predstav si uzivatel ma vic karet na tvem webu a kdyz jednu zavre, musi se znova prihlasit na vsech. Prirovnani neni moc dobre.. Predstav si ze mas facebook a po zavreti okna se to automaticky odhlasi ale za 2 minuty tam jdes znova a musis se prihlasovat, na itnetworku, na google, vsude nic takoveho nemas jelikoz po delsi dobe to lidi bude stvat.
Otvorený Zdroj:31.10.2019 14:22
to ano na vic karet sa to nehodi, ale po zavreti celeho prehliadaca, by som
to aspon zvazil
S temi sockety to funguje tak, ze mas na serveru spusteny socket server. Tam
se pres js prihlasis a dokud se neodhlasis, bude si stranka se serverem pingat.
Kdyz nekdo prestane odpovidat, tak ti server vyhodi udalost s error, na kterou
muzes navazat dalsi kod, predat mu udaje, id uzivatele, aby ho odlogoval.
A ted je uz na tobe, jestli si to cele udelas sam, treba i v php a nebo pouzijes
hotove reseni. Pokud se da neco vygooglovat. Takove, ktere by streba zvladalo i
vic oken najednou.
Ten socket, asi nesposkytuje bezny webhosting, pre zaciatok by stacilo, nieco ako update predlzovanie casu expiracie u prihlasaneho.
Myslim cas prihlasenia + session expiracia v php a po vyprsani expiracie keby bol uzivatel este stale prihlaseny by bol poslany alert potvrdte prihlasenie.
Session expirancia php by bola znizena z 24min, napr.na 12min, a po potvrdeni alertu by sa predlzovala o 12min, len co by bolo z casom keby sa cakalo na potvrdenie....ten by sa tiez musel niekde nastavit napr.na 12 minut a potom by vykonal odhlasenie natvrdo bez potvrdenia...
Nieco hotove by ma celkom potesilo
Jaroslav Smrž:1.11.2019 17:04
Ty tomu moc nechceš rozumět, co ti tu všichni říkají. WebSockets je nejlepší / jediná možnost, jak udělat to, co požaduješ. Sockety se píšou třeba v JSON, Node.js, Angular, SignalR a podobně. Podle toho, jakou používáš technologii. Např pro .NET aplikace je nejlepší SignalR. U PHP to bude asi jedno, jaký jazyk použiješ. Pokud se v tom vůbec neorientuješ, tak zde zadej nabídku k práci a někdo ti to určitě napíše. Pokud chceš zjistit víc, tak tuším, že tu někde byl článek o secketech, ale bude už asi starý. Popis SignalR najdeš zde
Otvorený Zdroj:1.11.2019 17:40
Websocket potrebuje podporu webhostingu, alebo VPS server...zase niekomu poslat do vrecka, ak mas link na sponzora, tak...kludne dam websocket...
Websocket dam maximalne na chat. Na prihlasovanie a statusy staci...co som napisal....takto napr,.funguje u fio banky...a nikto sa nestazuje ...jedine co treba je optimalne nastavit optimalne casy....
:2.11.2019 11:33
Žiadne optimálne časy neexistujú. Má to tak aj Wordpress a ľudí vie nenormálne nasrať, že po tom, čo pol hodinu prácne editovali článok, im ho následne WP neuloží, pretože boli odhlasení v dôsledku neaktivity. A nad týmto premýšľaš len preto, aby si ušetril tri eurá mesačne...
3E sice nie je vela, ale k tomu treba priratat aj nove ucenie, a momentalne tlaci cas...
Pridavanie casu do session je jednoduchsie, nikoho nenaserie, ked vyprsi cas,
ukaze alert predlzit session...a vybavene...moje JS je slabsie, takze ak ma
niekto..dobry skript, budem rad
- Web socket je dobry proto, ze posila ping 2-4 byte sam, periodicky a tim udrzuje spojeni. A sam ti da vedet, kdyz spojeni vypadne. Problem muze nastat, pokud ma clovek nestabilni pripojeni. Wifi, treba huste snezi, vypadky. Cili, je to az prilis citlive, prilis casto si pinga, prilis kratky cas (nevim to ted z hlavy, ale myslim, ze se jedna o ms, s).
Ten cas jde ale tusim snad nastavit... Nejsem si ted moc jisty, nepouzivam to zatim nikde, jenom nejake testy jsem zkousel.
- Session je proti tomu celkem idealni. To drzi spojeni 17 minut a je tak odolnejsi na kratke vypadky a samo se obnovi pri otevreni noveho okna, prepnuti stranky.
- Muzes udelat neco jako web-sockety pomoci js ajaxu. Javascriptem otevirat stranku do skryteho iframe / object (nebo js httprequestem do promene). Nevyhoda je, ze pri nacitani stranky se posila 1000-2000 byte hlavicka + stranka. Ping websocketu byl 2 byte. Tady bych dal treba 5 takovych stranka-pingu nez bych prohlasil uzivatele za definitivne odpojeneho. Opet totiz muze mit vypadky spojeni a muze ho to pri prvnim pozde odeslanem pingu odlogovat.
- Ja bych zkombinoval websocket a ajax. Ajax by navazal websocketove pripojeni a kdyz by padlo, tak se nic nedeje, ajax periodicky zkusi znovu. Tady se jedna rekneme tak o 10-100-200 byte. Podstatne je, aby se mu to aspon jednou rekneme z 10 pokusu podarilo. Pak to pripojeni muze hned zrusit. Sice to bude bytove neusporne, ale tebe vic nezajima.
Nicmene, stale je tu moderni usporny prohlizec, ktery potlaci prave neaktivni okno (pokud mas 10 oken, tak jedno mas na popredi, ostatni jsou na pozadi, neaktivni) do pozadi a snizi mu tez vykonavani javascriptu. Timpadem ajaxove i websocketove reseni muze padnou. Ikdyz, ws si nejspis pohlida prave kvuli nenarocnosti. Kdo vi. Nezkousel jsem.
Otvorený Zdroj:6.11.2019 3:03
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
p {
text-align: center;
font-size: 60px;
margin-top: 0px;
}
</style>
</head>
<body>
<p id="demo"></p>
<script>
// Tu hodnotu z DB do var countDownDate = '<?php $this->vrat_time_expire() ?>';
var countDownDate = new Date().getTime()+10000;
// Update the count down every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the count down date
var distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Output the result in an element with id="demo"
// document.getElementById("demo").innerHTML = days + "d " + hours + "h "
// + minutes + "m " + seconds + "s ";
document.getElementById("demo").innerHTML = minutes + "m " + seconds + "s ";
// If the count down is over, write some text
if (distance < 5000) {
r=window.confirm('Stránka za 5min(5s) expiruje, želáte si predlžiť čas a ostať prihlásený? ');
if (r == true) {
document.write("You pressed OK!");
//<?php $this->update_time_expire() ?>
clearInterval(x);
}
else {
document.write("You pressed Cancel!");
//<?php header("Location: /cms/logout"); ?>
clearInterval(x);
}
}
}, 1000);
</script>
</body>
</html>
Ajax momentalne neovladam a JS len zaklady, chcem to vyskusat na locahoste, tak aby preberalo hodnoty z DB, a odpocitavanie bolo skryte, ukazalo len vystrazne okno ked prejde stanoveny odpocitavaci cas. OK predlzi session, vykona update v DB , CANCEL - odhlasi uzivatela.... len neviem akoby JS prebral tie hodnoty PHP....
google = ajax firefox example
https://developer.mozilla.org/…_API/Example
Ale muzes to resit treba pres tag script
--- index.htm ---
<script src="" id="aaa"></script>
<input type=button value=klikni onclick="myclick()">
<script>
const $ = document.querySelector.bind(document);
function myclick()
{
$('#aaa').src = 'stranka.php' + '?' + Date.now(); // ten datum je tam kvuli kesovani
}
</script>
--- stranka.php ---
<?php
ob_start();
header('Content-Type: application/javascript');
header('Content-Type: text/html; charset=UTF-8');
$time = date("m.d.y H:i:s", time());
$str = "
alert('$time');
";
echo $str;
?>
// nebo (kvuli, pokud se ti nechce komentovat uvozoky, da se pouzit zapis s <<<)
$str = <<<EOF
alert('$time');
EOF;
// a nebo ukoncit php
?>
alert('<?php echo $time; ?>');
alert('<?= $time; ?>');
Otvorený Zdroj:8.11.2019 3:32
Session tych max 24min sa odpocitava, odkedy jedna so stranok webu pustena, a pokial sa prejde na druhu stranku toho isteho webu uz sa pocita odznova 24minut u prihlaseneho?
Kazdy reload stranky spusti vzdy nove odpocitavanie session?
Peter Mlich:8.11.2019 7:55
Jo.
Nebylo by jednodussi to vyzkouset nez cekat na odpoved do rana? Prenastavit
hodnotu session na 5 minut nebo nejaky kratsi interval a sledovat, co se
stane?
Jako, nej problem jsou fakt vypadky spojeni. Kratky vypadek a vetsina systemu te odloguje. Proto proste kratke intervaly nemaji prilis smysl. Ale to samozrejme jde vyresit i u tech socketu. Pocitat cas, jak dlouho je vypadek a mezitim se pokouset navazat znovu spojeni. Ale nevim, zda ti nekdo da k tomu hotove reseni. Vetsinou je to know-how.
Otvorený Zdroj:13.11.2019 3:23
Myslim, ze sa mi podarilo dosiahnut funkcne - uspokojive riesenie bez websocketov a Ajaxu.Stacilo jednoduche PHP a JS. Bude obsahovat 2x odpocitanie.Kazda stranka po nacitani bude odpocitavat 24 min. do expiracie. Ked dosiahne 3min.do konca expiracie - Vybehne okno s upozornenim:
Stranka expiruje v case xx, do 3 minut.(3min. casu na ulozenie obsahu)
OK- mate cas 10s ulozit obsah alebo zostanete prihlaseny
Zrusit - budete odhlaseny
-- Na kazdej stranke by malo byt, alebo na jednej s dosahom na vsetky --
<body>
<?php
//cas expiracie 24minut v milisekundach, pre cas js
$time_expire_js= time()*1000+1440000;
//vystup pre uzivatela - cas expiracie, v php
$time_expire_format= date(" H:i:s", time()+1440);
?>
<p id="odpocitavanie_expiracie"></p>
<p id="odpocitavanie_poupozorneni"></p>
<script>
// cas expiracie
var countDownDate = <?php echo $time_expire_js; ?>;
//odpocitavanie casu expiracie 1.odpocitavanie
// Update the count down every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the count down date
var distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// zakomentovane nie je potrebne na vystupe, uzivatela by privadzal do stresu
// Output the result in an element with id="odpocet_expiracie"
//document.getElementById("odpocitavanie_expiracie").innerHTML =minutes + "m " + seconds + "s ";
// ked odpocet expiracie dosiahne 3min=180000 milisec.
if (distance < 180000) {
r=window.confirm('Stránka vás automaticky odhlási po 24min. nečinnosti, presne v čase '+'<?php echo $time_expire_format; ?>'+'.\n\n'+
'Želáte si predĺžiť pobyt na webe o 24min.? (Inak automatické odhlásenie za 3min.)\n\n'+
'OK - máte 10 sekund na uloženie textu alebo zostanete prihlásený \n\n'+
'Zrušiť - budete odhlásený\n\n');
//Ked uzivatel stlaci OK
if (r == true) {
clearInterval(x);
//aktualny cas
var casteraz=new Date().getTime();
//ked uzivatel nezareaguje do 3minut, bude automaticky odhlaseny, cas vycleneny na reakciu uzivatela po upozorneni
if(casteraz > countDownDate) { location.replace("administrace/odhlasit") }
// cas 2.odpocitania prida 10sec
var countDownDatez = new Date().getTime()+10000;
// Odpocitavanie casu po upozorneni a stlaceni OK, 2.odpocitanie
// Update the count down every 1 second
var z = setInterval(function() {
// Get today's date and time
var nowz = new Date().getTime();
// Find the distance between now and the count down date
var distancez = countDownDatez - nowz;
// Time calculations for days, hours, minutes and seconds
var daysz = Math.floor(distancez / (1000 * 60 * 60 * 24));
var hoursz = Math.floor((distancez % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutesz = Math.floor((distancez % (1000 * 60 * 60)) / (1000 * 60));
var secondsz = Math.floor((distancez % (1000 * 60)) / 1000);
// Display the result in the element with id="odpocitavanie_poupozorneni"
document.getElementById("odpocitavanie_poupozorneni").innerHTML = "("+secondsz + "s )";
// ak uplynie cas druheho odpocitania
// If the count down is finished
if (distancez < 0) {
clearInterval(z);
//predlzi cas expiracie a refresh stranky
<?php echo $spravceUzivatelu->update_time_expire(); ?>
location.reload()
}
}, 1000);
}
else { // ked uzivatel stlaci zrusit
location.replace("administrace/odhlasit")
clearInterval(x);
}
}
}, 1000);
</script>
</body>
--subor s funkciami --
public function prihlas($email, $heslo)
{
// tu kod pre prihlasenie ...
//cas expiracie nastaveny v php 24min. = 1440000milisec, v milisekundach pre js
$time_php=1440000;
//ulozi pole $uzivatel do session
$_SESSION['uzivatel'] = $uzivatel;
//cas v milisekundach pre js
$time_start=time()*1000;
$_SESSION['time_expire'] =$time_start + $time_php;
$pole = array(
'time_expire' => $_SESSION['time_expire'],
);
$klice = array('time_expire');
$hodnoty = array_intersect_key($pole, array_flip($klice));
//automaticky vykona update v tabulke
Db::zmen('uzivatele', $hodnoty, 'WHERE email = ?', array($email));
}
public function update_time_expire()
{
//cas v milisekundach pre js
$time_teraz=time()*1000;
if (isset($_SESSION['time_expire']) && $_SESSION['time_expire'] > $time_teraz)
{
//cas expiracie nastaveny v php 24min. = 1440000milisec, v milisekundach pre js
$time_php=1440000;
$_SESSION['time_expire']=$time_teraz+$time_php;
$user =$this->vratUzivatele();
$pole = array(
'time_expire' => $_SESSION['time_expire'],
);
$klice = array('time_expire');
$hodnoty = array_intersect_key($pole, array_flip($klice));
//automaticky vykona update v tabulke
Db::zmen('uzivatele', $hodnoty, 'WHERE email = ?', array($user['email']));
} // ak cas expiracie mensi ako cas pri update, automaticky odhlasi, atd.
else {
header("Location: /cms/administrace/odhlasit");
header("Connection: close");
}
}
// Odhlásí uživatele
public function odhlas()
{
// zavola funkciu v triede a ulozi do pola $user
$user =$this->vratUzivatele();
//nastavi uzivatela na neaktivny
$pole = array(
'time_expire' => 0,
);
$klice = array('time_expire');
$hodnoty = array_intersect_key($pole, array_flip($klice));
//automaticky vykona update v tabulke
Db::zmen('uzivatele', $hodnoty, 'WHERE email = ?', array($user['email']));
// a odhlasi uzivatela
unset($_SESSION['uzivatel']);
}
--A urcenie statusov moze byt napr.takto--
<?php if ($this->vrat_time_expire_usera($recipient_id)> time()*1000) : ?>
<img border="0" src="graphics/online.png" width="30" height="30" style="margin-top:0px; margin-bottom:0px;vertical-align: top; border-width:0px;" >
<?php endif ?>
<?php if ($this->vrat_time_expire_usera($recipient_id)< time()*1000) : ?>
<img border="0" src="graphics/offline.png" width="30" height="30" style="margin-top:0px; margin-bottom:0px;vertical-align: top; border-width:0px;" >
<?php endif ?>
Pokial sa nejedna o weblog, si myslim ze to..na zaciatok staci...
To je dost strasidelne.
Pro db bych v sql dotazu pouzil typ datetime, cas zapsal jako NOW().
Z php bych vytahl tabulku uzivatele (jmeno, cas), kde je
last_update_cas<NOW()-hodnota. Js tedy dostane seznam uzivatelu, jejich cas a
hodnotu now a dal, at si to vyresi.
Pri kazdem kliknuti se tedy v db updatuje uzivateli cas. A ty javascriptu
predavas jen uzivatele, kteri ten cas maji nyni-20 minut, treba. Neni treba
nikoho specialne odhlasovat. Javascript si to uz poresi i bez obnovovani stranky
jim nastavi offline. Na to ti staci jednou spustit setInterval. Nebo pouzij
setTimeout. Ten se sam vypne.
users (id_user, nick, name, date_last, date_reg, ...)
UPDATE users SET date_last=NOW() WHERE id_user=123 AND nick='honza' // to bych tam dal, pro jistotu, aby ten, kdo ten
sql dotaz posila vedel i neco vic nez id, nez neco uzivateli prepise
SELECT id_user, nick, name, date_last, NOW() FROM users WHERE date_last>=DATE_SUB(NOW(), INTERVAL 15 MINUTE); -- OR id_user=123
Vyber vse, kde je datum v intervalu a jeste tam muzes pridat a meho uzivatele, pokud bys te treba zajimala posledni aktivita predtim nez ji prepises
Otvorený Zdroj:14.11.2019 22:40
Pri kazdem kliknuti se tedy v db updatuje uzivateli cas. A ty javascriptu predavas jen uzivatele, kteri ten cas maji nyni-20 minut, treba.
Nerozumiem umyslu.V php je nastavena expiracia na 24min, a chcem docielit, aby web surovo neodhlasil uzivatela automaticky, preto 3min pred expiraciou mu poskytne upozornenie, ze ma 3 minuty pred expiraciou(3minuty casu na stlacenie OK).
Po stlaceni OK ma 10 sec casu na ulozenie obsahu a nasledne bude automaticky reload,ktorym predlzi cas expiracie. (nemusi nic ukladat, ak nechce, ak potrebuje, je mu danych 10 sec.)
Kazdym kliknutim na inu cast webu sa spusti, nove odpocitavanie(24min) a zaroven sa vykona update uzivatela v stlpci ['time_expire'] o predlzovaci cas...
Ked sa riadne odhlasi ['time_expire'] =0, status bude automaticky vyhodnoteny za offline: $this->vrat_time_expire_usera($recipient_id)< time()*1000)
Ked zavrie okno, tak bude prihlaseny online dokial bude ['time_expire'] >
ako sucastny cas:
$this->vrat_time_expire_usera($recipient_id)> time()*1000)
takze max. do 24 minut po zavreti karty, alebo okna by bol este oznaceny za online
Aspon tak by to malo aktualne fungovat..
Problem nastal, keby uzivatel zavrel okno bez odhlasenia, a v prehliadaci by mal nastavene, po otvoreni prehliadaca zacat od existujucej relacie, stoplo by JS, a uzivatel by bol prihlaseny na vecnost, a nefungoval by update casov. U prehliadaca Opera je to tak...VTEDY sa vlastne user neodhlasi po zavreti okna automaticky.....odhlasi ho az porovnavanie casov expiracie z db a aktualneho, ako mam v oprave...osetrene...
-- Oprava --
<?php
//vybere z db aktualny cas expiracie uzivatela
$time_expire_js= $this->vrat_time_expire_usera($this->vypis_id_prihlaseneho());
//najprv porovna tento cas s aktualnym a v pripade ze je mensi odhlasi uzivatela
if($time_expire_js<time()*1000) $this->presmeruj('administrace/odhlasit');
//a az potom nastavi novy cas expiracie, 24minut v milisekundach, pre cas js, pre update
time_expire_js=time()*1000+1440000;
$time_expire_format= date(" H:i:s", time()+1440);
?>
public function prihlas($email, $heslo)
{
//doplnenie
$maxlifetime_js=1440000;
** $maxlifetime_php=1440;**
** ini_set("session.gc_maxlifetime", $maxlifetime_php);**
**session_regenerate_id(true);**
//ulozi pole $uzivatel do session
$_SESSION['uzivatel'] = $uzivatel;
// pokracuje dalsi kod...
}
// Odhlásí uživatele
public function odhlas()
{
**session_regenerate_id(true);**
** $_SESSION['time_expire']=0;**
// zavola funkciu v triede a ulozi do pola $user
$user =$this->vratUzivatele();
//nastavi uzivatela na neaktivny
$pole = array(
**'time_expire' => $_SESSION['time_expire'],**
);
$klice = array('time_expire');
$hodnoty = array_intersect_key($pole, array_flip($klice));
//automaticky vykona update v tabulke
Db::zmen('uzivatele', $hodnoty, 'WHERE email = ?', array($user['email']));
// a odhlasi uzivatela
unset($_SESSION['uzivatel']);
** unset($_SESSION['time_expire']);**
}
chýba $
//a az potom nastavi novy cas expiracie, 24minut v milisekundach, pre cas js,
pre update
$time_expire_js=time()*1000+1440000;
Zaujimave ze niektore weby nemaju osetrenu moznost...po zatvoreni okna, a otvoreni prehliadaca zacinaju od existujucej relacie, ako jeden nemenovany hraci server:)
Aha. Ja to moc nestudoval. Jdes na to dost slozite. A spolehas na procesy, na
ktere se spolehat nedalo asi nikdy
Pokud ma clovek vic oken, zalozek, nema v okne focus, prohlizec nemusi
upozorneni zobrazit ani nemusi hlidat cas, aby setril cpu. Pokud by to
fungovalo, mozna by se dal vyuzit i window.title (jak fb vzdycky pridava pocet
novych zprav, ikdyz v okne zrovna nejsi)
To upozorneni, ikdyz se zobrazi a nema v okne focus, tak si ho neprecte.
S tim ukladanim, nevim, co presne chces ukladat, ale vetsinou si muze uzivatel
sam hlidat, aby se mu neztratil obsah. Kazdopadne, pokud mu presmerujes stranku,
tak o obsah prijde a nemuze jej pouzit v druhem okne. Leda bys mu to ulozil
nekde mezi rozepsane, jak to delaji maily. Coz muzes delat automaticky, kazdych
5 min.
Jinak, asi postupujes dobre, podle pozadavku. Tez mivam podobne komplikovane
problemy, ktere uzivatele neoceni, ale zaberou mi treba tyden casu
Zobrazeno 24 zpráv z 24.