Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Algorytm]Własne Sesje
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Spirit86
Witam, mam następujący problem:
chcę zbudować własny mechanizm sesji. Głównym założeniem jest bezpieczeństwo aplikacji WWW. Zamierzam sprawdzać, czy przypadkiem 2 osoby jednocześnie nie są zalogowane na serwerze . Jednak, to nie jest problem, jak na razie winksmiley.jpg. Teraz mam problem z zaplanowaniem klasy, tj. zastanawiam się, czy lepiej jest stworzyć klasę obsługującą tylko mój CMS (sesje obejmowały by tylko potrzebne dane CMS'a), czy też zbudować "uniwersalny" system sesji, obsługujący nieskończoną liczbę danych, które mogły by w sobie zawierać.
Na razie jestem bardziej przychylny rozwiązaniu drugiemu, myślę nawet, że w Bazie Danych wystarczyła by tylko jedna kolumna przechowywująca "sprasowane zmienne".
Schemat Bazy Danych :
Kod
id | time | ip | place | vars

Zastanawiam się także nad typem danych SQL , jakim będzie vars (sprawsowana tablica) miałem zamiar dać VARCHAR (64), jednakże może być nie wystarczające na większą ilość danych.
Może zamiast tablicy przechowywać w SQL zrobić to na cookies? Choć może komuś cookies nie obsługiwać. Zresztą to jest niebezpieczne :\
SongoQ
2 rozwiazanie lepsze:)

Odnosnie pol to id_sesji, data, czas_wygasniecia, sesje
pole sesja oczywiscie jakis ogromny typ bo jesli w sesji bedzie duzo danych to moze sie sypac. Tak na prawde sesja w bazie danych to zserializowana tablica.
NuLL
Jeśli tablica duża to można przepuuścić przez gzcompress()" title="Zobacz w manualu PHP" target="_manual winksmiley.jpg
sobstel
na zmienne sesyjne radze dac pole TEXT wzglednie VARCHAR(255).

nie dalej jak wczoraj glowilem sie kilka godzin dlaczego mi pada obsluga sesji w aplikacji, po czym odkrylem ze prostu prostu dalem za male pole (VARCHAR 128) na dane sesyjne i byly obcinane w wyniku czego robil sie niezly kogel mogel (wczesniej nie przechowywalem duzo wartosci i nie wystapowal problem) dlatego ostatecznie zdecydowalem sie na TEXT.
Spirit86
@sopel: po analizie, spłaszczeniu kilku tblic doszedłem do tego samego wniosku biggrin.gif
SongoQ
Rozniez mam text dla sesji i jakos aplikacja juz prawie rok dziala i jeszcze sie nic nie wywalilo.
sobstel
moj wlasny przypadek opisany 2 posty powyzej byl typowym przykladem krotkowzrocznosci. gdy jakis czas temu powstawal moj handler obslugi sesji nie przechowywalem duzo danych sesyjnych (i nie przypuszczalem ze kiedys bede - tak to jest z rzeczami ktora maja byc uniwersalne), wiec poskąpiłem na przestrzeni w bazie. byl tez inny powod, jako typu tabeli uzylem HEAP/MEMORY (ktory nie obsluguje TEXT). wszystko dla lepszej wydajnosci, dlatego ciagle zastanawiam sie czy tabela sesyjna z zalozonym indeksem na sessionid wydaje sie byc wystaraczajaco szybka, czy tez MEMORY z VARCHAR(255) bylby znacznie lepszy.
AxZx
a moze ktos powiedziec jak mniej wiecej powinien wygladac algorytm dzialania takiego systemu sesji?
SongoQ
@AxZx masz gotowa funkcje ktora wywoluje Ci wlasne funkcje do zapisu, odczytu, usuwania. Nastepnie umieszczasz zwykle zapytania. Nic w tym skomplikowanego nie ma.
sobstel
Cytat(AxZx @ 2005-06-09 12:34:47)
a moze ktos powiedziec jak mniej wiecej powinien wygladac algorytm dzialania takiego systemu sesji?

na wortalu jest artykul jak zrobic wlasny handler sesji na bazie
Spirit86
stworzyłem już klasę, jednak wydaje mi się strasznie wolna, czas jaki się generuje to: 0.012-0.015 s. (zaincludowałm tylko sterownik bazy danych no i obsługę autologowania. Czy to nie za długo? :|
SongoQ
Zrob testy z roznymi wielkosciamy sesji i wtedy sprawdz jak sie maja czasy.
Spirit86
mówisz o testowaniu tylko i wyłącznie mojej klasy, czy np. porównaniu jej do session_register ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.