[PHP][MySQLi] Sesje w bazie danych, session_set_save_handler |
[PHP][MySQLi] Sesje w bazie danych, session_set_save_handler |
29.03.2019, 11:29:56
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
Dzien dobry. Mam pewien problem poniewaz pierwszy raz sie za to zabrałem i nie wiem jak ise do tego dobrac. Poczytalem troche na necie i zrobilem przyklad.
Ustawienie tabeli 'sessions' w bazie 'sesje_testy'
Skrypt 'handler.inc'
Plik 'set.php' do ustawienia sesji.
Plik wywolujacy sesje.
Są tam zmienne: $id, $access i $data I teraz zaczynają się schody bo... nie wiem jak mam usunac: 1. sesje poprzez te funkcje _destroy(). Ta funkcja ma argument $id ale jak wpisuje (zamiast tego $id) session_id() czyli _destroy(session_id()) to nic sie nie dzieje. W bazie jest przechowywane ID sesji, TIMESTAMP i dane sesji (nazwa i wartosc) 2. Nie wiem tez jak usunac sesje jesli minie czas: funkcja _clean($max) i czym jest teraz $max ? W tym momencie sa w jednym pliku wszystkie funkcje ale czy tak to ma byc ? bo troche bez sensu jest skoro f. _write() ciagle mi nadpisuje TIMESTAMPA i jak ma sie wtedy wykonac f. _clean() ? Chyba ze to mam porozdzielac na rozne pliki czy gdzie chce to poprostu pisze taka funkcje. Juz sam nie wiem |
|
|
29.03.2019, 12:49:55
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Poczytaj sobie dokumentację: https://www.php.net/session_set_save_handler
Wskazówka. Utwórz sobię klasę SessionHandlera implementującą interfejs tam podany (czytaj również komentarze w manualu bo zawierają mnuuustwo ciekawych rzeczy) i użyj. $max oznacza czas życia sesji. Czyli musisz time() - $max > $session_save_time i masz wynik sesjia przeterminowana. |
|
|
30.03.2019, 06:23:31
Post
#3
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
Tak jak napisalem wczesniej. Wywolujac te funkcje _clean() z argumentem tj. _clean(120); // 120sekund nic sie nie robi. Jest tam zmienna $old ktora zawiera wynik time() - $max czyli aktualny czas - 120sekund. I teraz jest warunek z bazy ze jesli access jest mniejszy od $old to ma usunac wszystko co jest mniejsze. Tylko ze wczesniej jest funkcja _write() ktora zawiera polecenie REPLACE i za kazdym razem nadpisuje timestamp (ten sam ktory zostaje potem sprawdzany w tej f. _clean() )
To malo. Probowalem usunac WSZYSTKO z tej tabeli wywolujac funkcje _clear() bez zadnego argumentu i tez nic. O co chodzi? Nikt nie wie?? Przyklad pochodzi z tej strony ktora bardzo duzo ludzi poleca. http://shiflett.org/articles/storing-sessions-in-a-database Wszystko dziala procz f. _clean() Zaraz zeświruje Ten post edytował zdun 30.03.2019, 08:00:27 |
|
|
30.03.2019, 09:05:47
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Ale po co chcesz to ręcznie wywoływać? PHP Automatem odpala sobie tą funkcję. Ty jedynie sprawdź czy samo zapytanie jest dobre.
|
|
|
30.03.2019, 09:52:04
Post
#5
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
No jesli chce ustawic sesje to robi to automatycznie ale musze wywolywac recznie w przypadku kiedy chce:
1. Usunac sesje. 2. Usunac rekord z bazy. I to nie dziala.Nawet jak nie robie tego "ręcznie" to i tak nie dziala bo co odswieżenie sprawdzam tabele i ciagle rekord istnieje. Pierwsze dziala kiedy wywolam f. _destroy() z argumentem session_id() lub poprostu $id czyli: _dstroy($id); Mozesz mi powiedziec jak powinna wygladac ta funkcja _clean() ? Tam jest ta zmienna $max chodzi mi o to wlasnie. Kiedy zamiast $max dam liczbe to wywala mi blad ze parser oczekuje zmiennej. No to wtedy w innym pliku includuje ten plik z tymi funkcjami, daje session_start() i wywoluje funkcje poprzez _clean('120'); i wtedy nie mam jiz bledu ale nic tez sie nie dzieje. Stary, nie czaje tego bo zalozmy ze: wartosc time() to "1000" czyli ten "tysiąc"" zapisuje sie do bazy w f. _write() W tym samym momencie dziala f. _clean() i tam bedzie tak: $old = "1000" - $max // $max czyli 120 sekund Czyli wartosc zmiennej $old to 880 I dalej zapytanie do bazy ze : Usun jesli "access" jesli jest mniejsze od $old Problem w tym ze nigdy mniejsze nie bedzie bo access to 1000 a $old to 880 Te 1000 to tylko umowne ale nie wazne czy to bedzie timestamp ktory co sekunde sie zwieksza czy to bedzie stala wsrtosc bo to wystepuje sarowno w f. _write() jak i w f. _clean() - ta sama wartosc w tym samym czasie. Ok. Wiec czemu by nie zamienic operatora na odwrot wtedy na logike powinno sie wykonac zapytanie. Niestety nie wykonuje sie. Ten przyklad caly pochodzi z tamtej strony ktora podalem. Raczej nikt tam blefu nie popelnil. Wiec gdzie on jest tutaj skoro wszystko powinno dzialac. Musze wywolywac recznie _clean($arg); bo musze przekazac wartosc ale nawet jak to zrobie w srodku funkcji to tez nie dziala. Wszystko inne tak. Ten post edytował zdun 30.03.2019, 10:27:32 |
|
|
30.03.2019, 12:23:33
Post
#6
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
.... Ten przyklad caly pochodzi z tamtej strony ktora podalem. Raczej nikt tam blefu nie popelnil. Wiec gdzie on jest tutaj skoro wszystko powinno dzialac. Ten artykuł ma 15 lat! -------------------- |
|
|
30.03.2019, 12:28:50
Post
#7
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
Teraz pytanie ogolne.
Jest wogole sens tak kombinowac z sesjami zeby je zapisywac w bazie ? Bo przeciez wazniejsze jest cookie sesji nie sama sesja ktora notabene jest ustawniana w przegladarce. Moze lepiej skupic sie na samym ciachu zamiast kombinowac z sesjami. Co o tym myslisz. Ten artykuł ma 15 lat! Owszem ale przyklad zostal przerobiony z mysql na mysqli. |
|
|
30.03.2019, 12:40:25
Post
#8
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
Jeżeli koniecznie z jakiegoś powodu nie chcesz zapisywać sesji na dysku (standardowe ustawienie php), to lepiej do tego nadają się memcached albo redis.
Wystarczy zmienić odpowiednie ustawienia: Kod session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379" Rzuć też okiem na resztę opcji dotyczących sesji: https://www.php.net/manual/en/session.configuration.php -------------------- |
|
|
30.03.2019, 13:00:08
Post
#9
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
Jeżeli koniecznie z jakiegoś powodu nie chcesz zapisywać sesji na dysku (standardowe ustawienie php), to lepiej do tego nadają się memcached albo redis. Wystarczy zmienić odpowiednie ustawienia: Kod session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379" Rzuć też okiem na resztę opcji dotyczących sesji: https://www.php.net/manual/en/session.configuration.php Ogolnie to nie wiem tak konkretnie czy jest sens trzymania sesji w bazie. Jest sens Szukam i szukam i znalazłem jeszcze cos takiego i to sprawdze: http://www.hackingwithphp.com/10/3/7/files-vs-databases Po prostu szukam rozwiazania ktore zapewni mi maks bezpieczenstwa. Ale czy to rozwiaze mi moj problem Nie wiem czy olac to wywolywac sesje zwyczajnie uwazajac na ciastko sesyjne. Aktualizowac id sesji i samą sesje... |
|
|
30.03.2019, 13:06:24
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Ja bym jeszcze to poczytał https://igotaprinter.com/blog/database-back...ken-in-php.html
-------------------- |
|
|
30.03.2019, 13:47:00
Post
#11
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
Ja bym jeszcze to poczytał https://igotaprinter.com/blog/database-back...ken-in-php.html Chodzi mi o konkretną odpowiedz.tak lub nie. Ja na Tobie nic nie wymuszam. Chcesz to napisz ale konkretnie Ten post edytował zdun 30.03.2019, 14:05:33 |
|
|
30.03.2019, 14:45:21
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
W dokumentacji masz kilka przykładów gotowych klas. Na githubie zapewne jeszcze więcej projektów. Do rad zastosowania interface i tak się nie stosujesz a nawet jak to zacznie działać będzie i tak złe z powodów wymienionych w powyższym artykule. Więc jakiej odpowiedzi oczekujesz?
Gotowe https://github.com/JamieCressey/PHP-MySQL-S...sionHandler.php Ten post edytował viking 30.03.2019, 14:47:32 -------------------- |
|
|
30.03.2019, 15:42:55
Post
#13
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
To ja odpowiem. Jeśli nie wiesz po co Ci to to odpowiedź jest NIE
|
|
|
30.03.2019, 20:18:13
Post
#14
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
W dokumentacji masz kilka przykładów gotowych klas. Na githubie zapewne jeszcze więcej projektów. Do rad zastosowania interface i tak się nie stosujesz a nawet jak to zacznie działać będzie i tak złe z powodów wymienionych w powyższym artykule. Więc jakiej odpowiedzi oczekujesz? Gotowe https://github.com/JamieCressey/PHP-MySQL-S...sionHandler.php Czyli ten przyklad jest zly? Czy ot tak to podales. To ja odpowiem. Jeśli nie wiesz po co Ci to to odpowiedź jest NIE Jeszcze tylko jakbys mogl uścislic do czego to NIE sie tyczy to by bylo fsjnie |
|
|
30.03.2019, 20:34:25
Post
#15
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Do trzymania sesji w bazie. Generalnie dla ciebei trzymanie sesji gdzielolwiek poza tym co jest standardowo nie ma sensu.
|
|
|
31.03.2019, 06:42:13
Post
#16
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
Do trzymania sesji w bazie. Generalnie dla ciebei trzymanie sesji gdzielolwiek poza tym co jest standardowo nie ma sensu. Zadawalem konkretne pytania. Od tego jest forum Nie wszedlem i nie oczekiwalem zeby ktos za mnie cos zrobil tylko chcialem uzyskac odpowiedzi a nie zostawac odsylany gdzie indziej. Nic sie nie dowiedzialem procz insynuacji ze jestem leniwy i nic nie wiem. Jakos sobie poradze sam. Ten post edytował zdun 31.03.2019, 08:17:59 |
|
|
31.03.2019, 09:42:27
Post
#17
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Odpowiedziałem na Twoje pytanie ogólne więc nie bardzo wiem jaki masz problem. Podałem Ci link do dokumentacji, powiedziałem jak by było lepiej żebyś zrobił, powiedziałem nawet żebyś poczytał komentarze z dokumentacji. Zrobiłeś to wszystko? Nie bardzo.
|
|
|
3.04.2019, 13:06:03
Post
#18
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.03.2019 Ostrzeżenie: (0%) |
oj tak, Ty wiesz najlepiej co zrobilem a czego nie. Śmiechu warte. Nie odpowiedziales mi na zadne pytanie konkretnie.
|
|
|
3.04.2019, 13:44:11
Post
#19
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Ja ci wstawiłem gotowy kod ale widac też z tego nie skorzystałeś raczej.
-------------------- |
|
|
3.04.2019, 18:07:51
Post
#20
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 12:44 |