#programowanie #php #webdev jak zaprojektowalibyście funkcjonalność "ostatnio oglądane" biorąc pod uwagę to, że użytkownik może otworzyć równoczeście wiele zakładek?
Ja to zrobiłem tak, że do sesji zapisałem tablicę z kolejnymi rekordami i usuwam duble jesli juz bylem na danej podstronie. Problem pojawia się w momencie otwarcia wielu zakładek jednoczesnie bo sesja zaczyna wariowac i sie nadpisywac zakladka po zakladce (tzn wszystko jest ok jak wczytuja sie z kilkusekundowym odstepem). Macie na to jakis pomysl? Probowalem session_commit i session regenerate i troche pomoglo, ale problemu nie rozwiazalo.
@TheFuckingRoses: A masz z tym problem nawet jesli zrobisz session commit najwyzej jak sie da? W sensie tak blisko poczatku skryptu jak to tylko mozliwe..?
@czolnowski: chce to pokazywac tylko temu konkretnemu uzytkownikowi. Baza danych moim zdnaiem jest bez sensu jesli chdozi o wydajnosc i koniecznosc kontrolowania tego
Sprawdzales jakie masz I/O na serwerze..? Moze dyski sie dlawia? To wspoldzielony hosting? Masz pelna wladze nad serwerem? Mozna zrobic taki myk zeby na poziomie os utworzyc ramdysk i sesje php trzymac wlasnie na takim dysku.
Duzo zalezy od tego jak wyglada cel srodowisko, ilu masz userow etc.
@TheFuckingRoses: Baza nie jest wolnym rozwiązaniem. Ani mało wydajnym. No chyba, że źle jej używasz. Najwolniejszą opcją będzie często commitowanie sesji opartej o FS. (przy częstych zapisach trzeba sesje przenieść na jakiś ramowy storage: memcached, redis?)
@TheFuckingRoses: Też bym odradzał bazę danych, szkoda bazy na usera, który może już nigdy nie wrócić na stronę, można się co prawda bawić z czyszczeniem tego itd., ale po co? Może lepiej na ciastku, zamiast na sesji?
$_COOKIE['lastViewed'][] = $prodId;
$_COOKIE['lastViewed'] = array_unique($_COOKIE['lastViewed']); Nie może nie działać ;). Na koniec jeszcze możesz sobie np. obcinać, tak aby trzymało tylko ostatnich 10 rekordów (czyli musisz brać albo ostatnie 10 z końca
@adrael: problem tkwi w tym ze musze ograniczyc komunikacje z serwerem API na ktory dlugo sie czeka i tym samym zapisuje wiecej danych do tablicy niz samo id a wtedy pojemnosc ciastka nie wystarcza ;/
@TheFuckingRoses: No to najlepsze co zostaje, to baza danych. Zrób sobie primary key na productId i użyj INSERT IGNORE - jednym zapytaniem załatwisz problem duplikatów. Trzymanie max 10 rekordów per usera, to już będziesz musiał się pobawić z COUNT i DELETE ;).
Ja to zrobiłem tak, że do sesji zapisałem tablicę z kolejnymi rekordami i usuwam duble jesli juz bylem na danej podstronie. Problem pojawia się w momencie otwarcia wielu zakładek jednoczesnie bo sesja zaczyna wariowac i sie nadpisywac zakladka po zakladce (tzn wszystko jest ok jak wczytuja sie z kilkusekundowym odstepem). Macie na to jakis pomysl? Probowalem session_commit i session regenerate i troche pomoglo, ale problemu nie rozwiazalo.
@koob: sessioncommit — Alias of sessionwriteclose() ( ͡° ͜ʖ ͡°)
Sprawdzales jakie masz I/O na serwerze..? Moze dyski sie dlawia? To wspoldzielony hosting? Masz pelna wladze nad serwerem? Mozna zrobic taki myk zeby na poziomie os utworzyc ramdysk i sesje php trzymac wlasnie na takim dysku.
Duzo zalezy od tego jak wyglada cel srodowisko, ilu masz userow etc.
$_COOKIE['lastViewed'][] = $prodId;
$_COOKIE['lastViewed'] = array_unique($_COOKIE['lastViewed']);
Nie może nie działać ;). Na koniec jeszcze możesz sobie np. obcinać, tak aby trzymało tylko ostatnich 10 rekordów (czyli musisz brać albo ostatnie 10 z końca
array_unshift($_COOKIE['lastViewed'], $prodId); //wrzucamy $prodId na poczatek tablicy
$_COOKIE['lastViewed'] = array_unique($_COOKIE['lastViewed']); //usuwamy