Nie wiem szczerze jak to jest z autoryzacją i sesją rozwiązane w phpBB, ale generalnie jeżeli chcesz robić limit dla użytkownika, to musiałbyś zrobić osobną tabelę w bazie danych, i do tej tabeli musiałbyś wrzucać dane (insert) po każdym kliknięciu. A przed każdym wyświetleniem linku sprawdzać czy dla danego linku "kliknięcie" już istnieje w bazie. Więc dla linków również musiałbyś zrobić tabelkę. Nie pokaże ci jakby to mogło wyglądać w phpBB, mogę ci pokazać jak to będzie mogło wyglądać w sql, a twoim zadaniem będzie dostosowanie sobie tego.
Tabela links:
Kod
CREATE TABLE links (
id int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
day tinyint unsigned NOT NULL,
link varchar(255) NOT NULL
);
tabela user_clicks:
Kod
CREATE TABLE user_clicks_as (
id int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
link_id int unsigned NOT NULL,
user_id int unsigned NOT NULL,
date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
zapytanie które pobiera link na dzisiaj, zakładając że masz tylko 7 linków w tabeli (dlatego kolumna day, a nie timestamp):
Kod
SELECT l.* FROM links AS l JOIN user_clicks AS uc ON l.day=DAYOFWEEK(NOW()) WHERE CURDATE() = DATE(uc.date)
Takie zapytanie zwróci ci wynik tylko wtedy kiedy użytkownik kliknął danego dnia. Więc łatwo możesz na tej podstawie oszacować czy użytkownik kliknął w dany link z dnia tygodnia, danego dnia.
Najlepiej jakbyś całość umieścił w osobnym pliku. Wtedy przekierowanie miałbyś bezpośrednio w tym pliku, link mógłby być aktywny, ale przekierowywałbyś w przypadku kiedy ktoś już dzisiaj kliknął, na jakaś stronę z komunikatem. No generalnie można to rozwiązać na kilka sposobów, to jest jeden ze sposobów który przyszedł mi do głowy.
EDIT: musisz wziąć pod uwagę że DAYOFWEEK działa podobnie jak date('w'). Podobieństwo ogranicza się do dnia tygodnia od którego zaczyna się liczenie (od niedzieli do soboty), z tym że niedziela=1 a nie jak w przypadku date('w') gdzie niedziela to jest 0.