Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak przechowywać podręczne dane?
golab
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 15.03.2013

Ostrzeżenie: (0%)
-----


Mam jeszcze jedno pytanko, do mądrzejszych ode mnie (IMG:style_emoticons/default/smile.gif)

Otóż mam sobie portal, użytkownik loguje się.
Przechodząc ze strony do strony cały czas potrzebne są pewne stałe informacje (nazwy innych użytkowników z jego obszaru, id itp.). Każdy użytkownik ma zbiór innych stałych użytkowników, którzy mu się wyświetlają.

Tak więc za każdym razem, gdy użytkownik przechodzi z strony na stronę, wysyłam identyczne zapytania do MySQL.

Czy da się te informacje przechowywać w jakiejś pamięci podręcznej?

Widzę następujące możliwości. Proszę o komentarz, co powinienem wybrać:

1) zapisywać informacje w pliku tekstowym na serwerze, np. "tmp_{$user_id}.php", odświeżanym co rozpoczęcie nowej sesji.
2) przesyłać te informacje za pomocą $_COOKIES
3) przesyłać te informacje za pomocą $_SESSION
4) czy są jeszcze jakieś inne sposoby?

Jak Wy rozwiązujecie takie problemy najczęściej?


Wydaje mi się najlepsza opcja 1).


Pytanie drugie:
jak działa $_SESSION? Jeżeli zapiszę tam zmienną, ona w zaszyfrowanej postaci przesyłana jest na komputer użytkownika, czy cały czas znajduje się na serwerze?
Jeżeli zapiszę sobie np. 100 kb danych w $_SESSION to za każdym razem te informacje przesyłane są pomiędzy użytkownikiem a serwerem?


Pytanie trzecie:
czy jeżeli wybiorę opcje 2), to czy ktoś fizycznie jest w stanie zmienić pliki cookies na swoim komputerze tak, aby je spreparować i wyświetlać błędne/shackowane informacje?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Ghost_78
post
Post #2





Grupa: Zarejestrowani
Postów: 222
Pomógł: 34
Dołączył: 3.11.2010

Ostrzeżenie: (0%)
-----


pyt 1) Ja bym to chowal w sesji ($_SESSION) najlatwiej i najszybciej
pyt 2) pliki sessji zapisywane sa na serwerze. miedzy uzytkownikiem a serwerem jest przesylany zawsze tylko i wylacznie identyfikator tej sesji, wiec niezaleznie czy bedziesz mial w sesji 100kB czy 100MB transfer miedzy maszynami sie nie zmieni.
pyt 3) tak - ciastko mozna zmienic i to w bardzo prosty sposob. poza tym to wlasnie w tym przypadku potrzebny jest transfer miedzy klientem a serverem.
Go to the top of the page
+Quote Post
golab
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 15.03.2013

Ostrzeżenie: (0%)
-----


właśnie o taką odpowiedź mi chodziło (IMG:style_emoticons/default/smile.gif)
Dzięki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
pedro84
post
Post #4





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


Jedno magiczne słowo: cache. Skoro przechowujesz takie dane w bazie danych, to dlaczego nie chcesz keszować tych wyników? W b. ładny sposób możesz je przechowywać za pomocą Redisa, APC czy memcache.

Możesz sobie ustawić czas życia, etc. A jak wygaśnie Ci sesja, to tych danych już nie masz.

Cytat(Ghost_78 @ 21.10.2013, 08:23:17 ) *
pyt 2) pliki sessji zapisywane sa na serwerze. miedzy uzytkownikiem a serwerem jest przesylany zawsze tylko i wylacznie identyfikator tej sesji, wiec niezaleznie

Bzdura, dane sesyjne są ładowane do pamięci.
Go to the top of the page
+Quote Post
Ghost_78
post
Post #5





Grupa: Zarejestrowani
Postów: 222
Pomógł: 34
Dołączył: 3.11.2010

Ostrzeżenie: (0%)
-----


Cytat
Bzdura, dane sesyjne są ładowane do pamięci.


http://pl.wikibooks.org/wiki/PHP/Sesje

Cytat
Działanie sesji w PHP jest bardzo proste. W momencie pierwszego trafienia na stronę interpreter tworzy specjalny, losowy oraz unikalny identyfikator przesyłany między żądaniami za pomocą ciastek lub parametru PHPSESSID doklejanego automatycznie do adresów URL. Na jego podstawie odczytywany jest później odpowiedni plik z danymi sesji zapisany gdzieś na serwerze. Pod koniec przetwarzania żądania wszystkie wprowadzone przez skrypt zmiany są z powrotem zapisywane do wspomnianego pliku tak, aby były widoczne przy wejściu na kolejną podstronę. I tak to się toczy.


Zanim napiszesz "bzdura" upewnij sie czy masz racje.

Jezeli skonfigurujesz inaczej server, to dane sesji moga byc przechowywane w innym miejsu np w bazie. Byc moze, mozna skonfigurowac apacha zeby przechowywal dane sesji w pamieci - ale nie widze sensu dla takiego rozwiazania.
Go to the top of the page
+Quote Post
pedro84
post
Post #6





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


No właśnie sam cytujesz fragment, który pokazuje, że Twoja teoria jest bzdurą (pomijam fakt, że trochę zły fragment Twojego posta zacytowałem, bo mi chodziło o sens Twojej porady w szczególności biorąc pod uwagę rozmiar 100 MB i mogłem od razu rozwinąć). Przyjmujemy, że dane sesyjne są przechowywane w plikach. Tak, dane są zapisywane domyślnie na dysku. Tak, pomiędzy klientem a serwerem (po kiego przez "v"?) jest przesyłany tylko identyfikator sesji. Sorry, mogłem rozwinąć od razu. W teorii, oboje mamy racje i oboje się mylimy (IMG:style_emoticons/default/wink.gif) Ale, zapomniałeś o ważnej rzeczy i tego dotyczył mój post. O pamięci (bo dane sesyjne, nawet przechowywane w plikach są ładowane do pamięci o czym niżej).

W momencie startu sesji za pomocą session_start() bądź też startu automatycznego sesji (jeśli ustawione w php.ini) php czyta plik danej sesji. Zacytuję Twój cytat:
Cytat
Na jego podstawie odczytywany jest później odpowiedni plik z danymi sesji zapisany gdzieś na serwerze. Pod koniec przetwarzania żądania wszystkie wprowadzone przez skrypt zmiany są z powrotem zapisywane do wspomnianego pliku tak, aby były widoczne przy wejściu na kolejną podstronę.

Dane te są ładowane przez PHP do pamięci (a myślisz, że PHP "czyta" ten plik siłą woli?) Dlatego też, sesja nie powinna być "duża". Wyobraź sobie te rzeczone 100 MB. Dla jednego usera. "Zaczytane" z pliku do pamięci. Najpewniej będzie to więcej niż ilość pamięci, jaką skrypt PHP może skonsumować. Ale nawet jeśli nie, to co w przypadku 10 userów? Mamy 1000 MB. 100 userów? 10000 MB. O to mi chodziło.

Do przechowywania takich danych służy cache, a nie sesja.

Nawet na forum o tym dyskusja była:
http://forum.php.pl/index.php?showtopic=174946
http://forum.php.pl/index.php?showtopic=189498
http://forum.php.pl/index.php?showtopic=79563

i na SO:
http://stackoverflow.com/questions/4649907...f-a-php-session
http://stackoverflow.com/questions/4274955...ssion-variables

Ten post edytował pedro84 23.10.2013, 21:21:17
Go to the top of the page
+Quote Post
Ghost_78
post
Post #7





Grupa: Zarejestrowani
Postów: 222
Pomógł: 34
Dołączył: 3.11.2010

Ostrzeżenie: (0%)
-----


O masakra - i trafil sie czepliwy hater :/.

Cytat
serwerem (po kiego przez "v"?)

z przyzwyczajenia

Cytat
Wyobraź sobie te rzeczone 100 MB. Dla jednego usera. "Zaczytane" ... blah blah blah...

Podalem to tylko jako przyklad dla argumentu ze transfer pomiedzy klientem i serwerem bedzie taki sam w obu przypadkach. Bo takie bylo pytanie autora:

Cytat
golab:
Jeżeli zapiszę sobie np. 100 kb danych w $_SESSION to za każdym razem te informacje przesyłane są pomiędzy użytkownikiem a serwerem?


Nie rozumiem po co ta ironia:
Cytat
(a myślisz, że PHP "czyta" ten plik siłą woli?)

oczywiste jest to ze dane te sa ladowane do pamieci na czas obslugi sesji, tak samo jak wiele innych rzeczy, musza sie one znalesc w pamieci jak operujesz na nich.

Cytat
Do przechowywania takich danych służy cache, a nie sesja.

Autor nie pisal o kolosalnych ilosciach danych. Z twoich postow mozna wywnioskowac ze sesja to diabel w owczej skorze i trzeba sie go wystrzegac a wlasnie do takich rzeczy o jakie chodzilo autorowi jest przeznaczona sesja. Ale jak sadze chciales sie pochwalic znajomoscia takich wielkich slow jak cache, APC itp. Gratulujemy!

Nota bene, widziales kiedys sesje z SF2 ? Chyba bys sie pochlastal widzac ilosc danych zapisanych w niej.

Sadze ze temat mozna zamknac bo robi sie jalowy i bezprzedmiotowy.
Go to the top of the page
+Quote Post
pedro84
post
Post #8





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


Cytat(Ghost_78 @ 23.10.2013, 22:43:41 ) *
O masakra - i trafil sie czepliwy hater :/.

Nie hejter, tylko piszesz bzdury.

Cytat(Ghost_78 @ 23.10.2013, 22:43:41 ) *
Autor nie pisal o kolosalnych ilosciach danych.

No, autor nie pisał, ale Ty pisałeś o bezproblemowym przechowywaniu nawet 100 MB danych w sesji co jest bzdurą, przyznasz. Pomijając już nawet to, że autor pytał o transfer, nie powinieneś takich nierealnych rzeczy pisać, albo przynajmniej nadmienić. Po co? Po to właśnie, żeby ktoś Ci nie wypomniał pisania bzdur. Poza tym, to o co pytał autor to właśnie cache, a nie sesja. No bo jak będzie miał dużą kolekcję danych to wszystko szlag trafi.

Cytat(Ghost_78 @ 23.10.2013, 22:43:41 ) *
Z twoich postow mozna wywnioskowac ze sesja to diabel w owczej skorze i trzeba sie go wystrzegac a wlasnie do takich rzeczy o jakie chodzilo autorowi jest przeznaczona sesja.

To już jest Twoja swawolna interpretacja.

Cytat(Ghost_78 @ 23.10.2013, 22:43:41 ) *
Ale jak sadze chciales sie pochwalic znajomoscia takich wielkich slow jak cache, APC itp. Gratulujemy!

Tak, zapewne. Argumentów brakuje?

Cytat(Ghost_78 @ 23.10.2013, 22:43:41 ) *
Nota bene, widziales kiedys sesje z SF2 ? Chyba bys sie pochlastal widzac ilosc danych zapisanych w niej.

A widziałeś, żeby SF przechowywał w keszu kolekcje pochodzące z bazy dancyh? Nie, bo trzyma je... w keszu.

Widzę, że Kolega ma problemy z krytyką, spoko, kiedyś Ci przejdzie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
com
post
Post #9





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Ghost_78 z całym szacunkiem ale pedro84 ma rację, zacznijmy od faktu:
Cytat
Otóż mam sobie portal, użytkownik loguje się.


Więc na pewno ma to działać szybko, optymalnie itd, dlatego to co napisał pedro84 ma jak najbardziej sens , bo po pierwsze przyspieszymy działanie, a po drugie nie robimy sobie syfu z sesji, bo ona wcale do tego nie służy aby tam większe dane przechowywać... Powiadasz sesje w SF2, po pierwsze nijak się to ma do tematu bo autor operuje na czystym php, a nie frameworkach, a po drugie Symfony zaadaptowało obsługę klasy sesji w swój własny sposób, który z $_SESSION to ma chyba tylko wspólną nazwę SESSION (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 12:43