- Gość wyświetla stronę
--- Sprawdzamy czy sesja dla tego użytkownika została utworzona
----- Jeśli nie, to sprawdzamy, czy zostało wysłane ciasteczko z datą "ostatniej akcji" użytkownika
------- Jeśli nie: zapisujemy obecną datę do sesji (jako "ostatnia wizyta")
------- Jeśli tak: zapisz datę "ostatniej akcji" z ciasteczka do sesji jako "ostatnia wizyta"
----- Zapisujemy do sesji drugą datę, aktualną (jako "ostatnia akcja")
----- Oznaczamy wszystkie posty napisane między "ostatnia wizyta" a "ostatnia akcja" jako nieprzeczytane
----- Wysyłamy ciasteczko z "ostatnią akcją" użytkownika
--- Jeśli sesja została już wcześniej utworzona, to:
----- Aktualizujemy datę "ostatniej akcji" ("ostatnią wizytę" zostawiamy w spokoju)
----- Oznaczamy wszystkie postu napisane między "ostatnia wizyta" a "ostatnia akcja" jako nieprzeczytane
*----- Wysyłamy ciasteczko z obecną datą jako "ostatnia akcja"
* Dodatkowo, żeby podczas przeglądania strony w ramach jednej sesji gościowi nie wyświetlały się dopiero co przeczytane posty jako nieprzeczytane, trzeba będzie dodawać ich (przeczytanych w ramach tej sesji postów) ID do sesji i w miejscu oznaczonym gwiazdką wyłączać te posty z listy nieprzeczytanych.
Jedyny mankament tego rozwiązania:
- Gość wchodzi na strone
- Ma 5 postów nieprzeczytanych
- Czyta 3 z nich
- Wyłącza przeglądarkę
- Wchodzi na stronę ponownie
- Nie widzi już tych 2 postów jako nieprzeczytane
Ale jeśli gościom będzie takie zachowanie forum przeszkadzało, to zawsze się mogą zarejestrować

Dla zalogowanych użytkowników zrobiłbym tak jak pisałem wyżej - na bazie danych
A co do ikonek przeczytany/nieprzeczytany post to jeśli mają one inne nazwy, to powinny się zmieniać razem ze statusem postu (przeczytany/nieprzeczytany). Jeśli tego jakimś cudem nie robią, to trzeba byłoby wysłać do przeglądarki nagłówki, żeby nie trzymał tych obrazków w cache.