Funkce "přečtené" v fóru (ne)funguje schválně tak, jak (ne)funguje? Tzn. se mi zobrazují příspěvky jako nepřečtené a po x-tém "přečtení" (a to i řádově po několika měsících)?
1. Samozrejme, ze behem session se ti cookies ukladaji (smazou se az po zavreni okna).
2. To, jestli mam nejakej prispevek prectenej nebo ne, se nemuze ukladat v cookies, ale musi byt na serveru (pokud je tomu u Amateru jinak, tak je to fundamentalne spatne).
Nechci se Vám montovat do výměny názorů, jen zde napíšu svoje zkušenosti
Když jsme programovali diskuzní fóra, každé vlákno mělo mimo nadpisu i ID (když se kouknete nahoru do adresního řádku, vidíte taky topic_id), které se generovalo z datumu a času, resp. čas v milisekundách z php funkce time() (tady to funguje očividně jinak) a časovou značku posledního příspěvku.
Po zaregistrování uživatele měl v databázi mimo kolonky jména atd i buňku pro uchovávání přečtenosti / nepřečtenosti vláken. Teda spíš tam byl seznam vláken, která přečetl (jejich ID) a jejich čas poslední změny (příspěvku). Jelikož předem nebylo jasný, kolik jich přečte, neměl údaj předem danou velikost; ID a časy byly odděleny speciálním znakem (středníkem a svislou čárkou), nové údaje se ukládaly na konec řetězce.
Důvody byly 2: 1. Se předpokládalo, že každej uživatel nepřečte všechna vlákna, takže míň místa zabíral seznam toho, co nepřečetl, než co přečetl a 2. pokud by někdo založil nové vlákno, musel by se u VŠECH zaregistrovaných uživatelů zaktualizovat seznam toho, co nepřečetli, takže by to zabralo příliš strojovýho času.
Takže když se člověk pohyboval po fóru, tak všechny diskuze, které měly časové značky novější, než ty, co měl uživatel uložené u sebe (pokud je u sebe měl a na dané vlákno vůbe cněkdy koukal), byly označeny jako nepřečtené.
Problém nastal, pokud se admin rozhodl nějaké příspěvky smazat. Potom mělo fórum status jako nepřečtené, protože "poslední" příspěvek tam vlastně nebyl, ale v databázi zůstal uložen čas poslední změny (tzn. vložení příspěvku). Proto nešel zobrazit a dokud někdo nepřidal něco dalšího, tak to zůstalo jako nepřečtené. Vyřešilo se to tim, že příspěvek zůstal a mazal se jen obsah, resp. se nahradil textem Příspěvek byl administrátorem vymazán... nebo něco takovýho.
Pro pohyb mezi stránkami fóra se používalo GET s parametry v url, SESSION se používalo pro přenos uživatelských dat a listováním mezi stránkama v jednotlivých vláknech. Session má defaultně platnost 1440s, měnit ho je sraním si do vlastního hnízda, protože při aktualizaci SW se na to může zapomenout a akorát se něco posere.
Chci tim říct, že cookies (jako ukládání dat) jsem NIKDY na fórech nepoužíval. Všechny operace s ukládáním toho, co se přečetlo a nepřečetlo se dělo na konkrétních stránkách obsahu jednotlivých vláken v hlavičce skriptu a tudíž nemělo vliv (tenkrát anonymní prohlížeče nebyli, ale jsem si 100% jist), jestli tam uživatel přistupoval v nějakym anonymnim módu, z mobilu, tabletu...
Ale jak píše N3PI, fórum to od přírody není, možná to tu funguje jinak.
sizequeen: Myslel jsem, že maximum je 4KB v maximálně 50 souborech...
(upraveno)
Zasadni vec, je ta, kterou jsem zminil a ty na ni narazis na konci.
Tohle to tady neni forum v pravem slova smyslu. A od toho se to vse odviji.
Jednoduchym testem clovek zjisti, ze seznam/zapis prectenych vlaken a prispevku neni ulozen na serveru, ale v koncovem zarizeni. Staci vyuzit dve zarizeni.
Pokud by to bylo vazano na ID, tak je zcela jedno na cem to clovek cte, vzdy by to bylo prectene na vsech koncovych zarizenich. Tady tomu tak ale neni (narozdil od schlednutych galerii/videi, ktere se oznacuji).
(upraveno)
Máš teda pocit, že se údaje, které jsem zmiňoval, ukládají do session a zapíšou se na server až po kliknutí na Odhlásit?
Jestli je tomu tak, tak důvod může být ten, že databáze uživatelů může být otevřena pro zápis jen chvilku, nikoliv po každym pohybu mezi vlákny. Snižuje to vytíženost. Ale v dnešní době...
Ne, ani po precteni vlakna/prispevku a naslednem odhlaseni ti na jinych zarizenich neoznaci jiz prectene vlakna/prispevky.
To by se k tomu tady mel vyjadrit zdejsi programator jak to maji.
Fundamentalne to spatne neni.
Je potreba si uvedomit ze tohle neni server o diskuznim foru. Diskuzni forum je tu jenom jako doplnek, stejne jako dalsi sekce. Takze nemuzes ocekavat pokrocilou funkcionalitu jako na serverech, ktere se soustredi jenom na diskuzni forum.
Tak mi vysvětli, proč by se měl přenášet v každém HTTP-requestu seznam identifikátorů posledních přečtených příspěvků z každého fóra, které jsi kdy navštívil? Zrovna ve tvém případě by takový seznam rychle vyčerpal kapacitu cookies, která je 300 * 4 KB. To je přenost 1.2 MB při každém requestu! To by jistě ocenil každý uživatel. Neříkám, že neexistuje jiné řešení. Jen tvrdím, že zrovna Cookies není správné řešení. A to, že ho navrhuješ a obhajuješ, jen ukazuje, že o tom víš úplný hovno! Příště udělej všem tu laskavost a pokud nemáš konstruktivní poznámku (jako tady Lewis_), prostě se nevyjadřuj.
Velice rad bych se nasmal, kdyby jsi citoval tu cast, kde neco navrhuji, zejmena to co tvrdis ze navrhuji a obhajuji
Vazne jsem zvedavy, co si vymyslis
Mezitim si po teto odpovedi napsane na iP, sednu k iPadu abych se podival jak je tvuj prispevek neprecteny.
Funkce "přečtené" v fóru
Funkce "přečtené" v fóru
Nebo tim myslis, ze nejsem prihlasenej? (to samozrejme sem)
Navic pokud jsem prihlaseny, tak z jakeho prohlizece/modu na stranky pristupuju nemuze mit vliv.
2. To, jestli mam nejakej prispevek prectenej nebo ne, se nemuze ukladat v cookies, ale musi byt na serveru (pokud je tomu u Amateru jinak, tak je to fundamentalne spatne).
Když jsme programovali diskuzní fóra, každé vlákno mělo mimo nadpisu i ID (když se kouknete nahoru do adresního řádku, vidíte taky topic_id), které se generovalo z datumu a času, resp. čas v milisekundách z php funkce time() (tady to funguje očividně jinak) a časovou značku posledního příspěvku.
Po zaregistrování uživatele měl v databázi mimo kolonky jména atd i buňku pro uchovávání přečtenosti / nepřečtenosti vláken. Teda spíš tam byl seznam vláken, která přečetl (jejich ID) a jejich čas poslední změny (příspěvku). Jelikož předem nebylo jasný, kolik jich přečte, neměl údaj předem danou velikost; ID a časy byly odděleny speciálním znakem (středníkem a svislou čárkou), nové údaje se ukládaly na konec řetězce.
Důvody byly 2: 1. Se předpokládalo, že každej uživatel nepřečte všechna vlákna, takže míň místa zabíral seznam toho, co nepřečetl, než co přečetl a 2. pokud by někdo založil nové vlákno, musel by se u VŠECH zaregistrovaných uživatelů zaktualizovat seznam toho, co nepřečetli, takže by to zabralo příliš strojovýho času.
Takže když se člověk pohyboval po fóru, tak všechny diskuze, které měly časové značky novější, než ty, co měl uživatel uložené u sebe (pokud je u sebe měl a na dané vlákno vůbe cněkdy koukal), byly označeny jako nepřečtené.
Problém nastal, pokud se admin rozhodl nějaké příspěvky smazat. Potom mělo fórum status jako nepřečtené, protože "poslední" příspěvek tam vlastně nebyl, ale v databázi zůstal uložen čas poslední změny (tzn. vložení příspěvku). Proto nešel zobrazit a dokud někdo nepřidal něco dalšího, tak to zůstalo jako nepřečtené. Vyřešilo se to tim, že příspěvek zůstal a mazal se jen obsah, resp. se nahradil textem Příspěvek byl administrátorem vymazán... nebo něco takovýho.
Pro pohyb mezi stránkami fóra se používalo GET s parametry v url, SESSION se používalo pro přenos uživatelských dat a listováním mezi stránkama v jednotlivých vláknech. Session má defaultně platnost 1440s, měnit ho je sraním si do vlastního hnízda, protože při aktualizaci SW se na to může zapomenout a akorát se něco posere.
Chci tim říct, že cookies (jako ukládání dat) jsem NIKDY na fórech nepoužíval. Všechny operace s ukládáním toho, co se přečetlo a nepřečetlo se dělo na konkrétních stránkách obsahu jednotlivých vláken v hlavičce skriptu a tudíž nemělo vliv (tenkrát anonymní prohlížeče nebyli, ale jsem si 100% jist), jestli tam uživatel přistupoval v nějakym anonymnim módu, z mobilu, tabletu...
Ale jak píše N3PI, fórum to od přírody není, možná to tu funguje jinak.
sizequeen: Myslel jsem, že maximum je 4KB v maximálně 50 souborech... (upraveno)
Zasadni vec, je ta, kterou jsem zminil a ty na ni narazis na konci.
Tohle to tady neni forum v pravem slova smyslu. A od toho se to vse odviji.
Jednoduchym testem clovek zjisti, ze seznam/zapis prectenych vlaken a prispevku neni ulozen na serveru, ale v koncovem zarizeni. Staci vyuzit dve zarizeni.
Pokud by to bylo vazano na ID, tak je zcela jedno na cem to clovek cte, vzdy by to bylo prectene na vsech koncovych zarizenich. Tady tomu tak ale neni (narozdil od schlednutych galerii/videi, ktere se oznacuji). (upraveno)
Jestli je tomu tak, tak důvod může být ten, že databáze uživatelů může být otevřena pro zápis jen chvilku, nikoliv po každym pohybu mezi vlákny. Snižuje to vytíženost. Ale v dnešní době...
To by se k tomu tady mel vyjadrit zdejsi programator jak to maji.
Je potreba si uvedomit ze tohle neni server o diskuznim foru. Diskuzni forum je tu jenom jako doplnek, stejne jako dalsi sekce. Takze nemuzes ocekavat pokrocilou funkcionalitu jako na serverech, ktere se soustredi jenom na diskuzni forum.
Vazne jsem zvedavy, co si vymyslis
Mezitim si po teto odpovedi napsane na iP, sednu k iPadu abych se podival jak je tvuj prispevek neprecteny.