![]() |
![]() |
![]()
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: 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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 22:43 |