![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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. |
|
|
![]()
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) |
|
|
![]()
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. 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. |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
Post
#8
|
|
Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
O masakra - i trafil sie czepliwy hater :/. Nie hejter, tylko piszesz bzdury. 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. 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. Ale jak sadze chciales sie pochwalic znajomoscia takich wielkich slow jak cache, APC itp. Gratulujemy! Tak, zapewne. Argumentów brakuje? 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) |
|
|
![]()
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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 12:43 |