Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zastąpienie sesji - czym najlepiej to zrobić ?
ederlezi
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 17.11.2014

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


Witam,

moja znajomość PHP jest mocno ograniczona i nie chciałbym brnąć ślepo w niewłaściwe rozwiązanie. Mam parser XML , który działa i został napisany przez kogoś innego dość dawno temu. Ten parser składa się z kilkunastu plików , wywoływane są one jeden po drugim. Dane między plikami są trzymane w sesjach. Wszystko jest ok, dopóki wywołam ten parser z przeglądarki internetowej. Muszę go jednak zmienić. Będzie on wywoływany poleceniem GET bez mechanizmu utrzymania sesji.

Moje pytanie brzmi - jak najlepiej zamienić sesje na coś innego, żeby się najmniej napracować ? Mój pierwszy pomysł - przejrzeć wszystkie pliki i tam gdzie są zapisywane zmienne sesyjne , zapisywać zmienne do bazy danych. Tam gdzie są odczytywane zmienne sesyjne - zrobić odczyt z bazy danych. Problem się zaczyna, gdy sesje zawierają np tablice, bo wtedy trzeba by chyba serializować dane przed zapisem i potem odpowiednio deserializować przed odczytem. Jakie podejście zastosować, żeby zrobić to w miarę szybko ? Może istnieje inne - lepsze i szybsze rozwiązanie niż to, które ja wymyśliłem.

Pozdrawiam i dziękuję.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
session
post
Post #2





Grupa: Zarejestrowani
Postów: 112
Pomógł: 22
Dołączył: 11.04.2010
Skąd: Tarnów

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


Nie da się jednoznacznie odwzorować mechanizmu sesji (przynajmniej w prosty sposób ) w PHP, ale można przeanalizować do czego tak naprawdę wykorzystywane są sesje, czy służą do identyfikacji użytkowników i przechowywaniu przypisanym im wartości, czy tylko i wyłącznie do utrzymywania informacji przekazywanych między skryptami. Innymi słowy czy kilka użytkowników może "jednocześnie" wykonać skrypt, oraz czy wartości zmiennych sesyjnych faktycznie są unikalne i wymagają przechowania aż do końca sesji. Jeśli zależy nam na identyfikacji usera i ewentualnym przechowaniu przypisanych mu informacji sprawdziłbym czy środowisko w którym uruchamiany jest skrypt (skoro nie jest nim przeglądarka) obsługuje cookies. Magazyn danych oparłbym na bazie tekstowej, a funkcje dotyczące sesji "zamieniłbym" odpowiednikami:

session_start();
- otwiera magazyn
- sprawdza czy istnieje określone COOKIE (które zawiera ID usera)
- jeśli nie generuje unikalny ID dla "sesji" i zapisuje w COOKIE
- tworzymy tablicę wielowymiarową której kluczem pierwszego elementu jest ID, a jego wartością tablica niższego rzędu, do której będziemy wrzucać zmienne sesji.
- jeśli w bazie istnieje podane ID wczytuje zmienne (o tym potem) lub "zeruje" je
- jeśli nie, dodaje nowy wpis do bazy stosując JSON encode na utworzoną tablicę
- zwraca ID (chyba, że stworzymy taką zmienną o zasięgu globalnym, wtedy może zwracać boola)

session_destroy();
- sprawdza czy istnieje COOKIE
- jeśli tak usuwa cały wpis dodany do bazy związany z ID (przegląda wszystkie wpisy i usuwa konkretny)
- usuwa COOKIE
- zamyka magazyn
- zwraca boola

$_SESSION[" "] =
- pobiera ID z COOKIE
- wczytuje cały wpis z bazy dotyczący ID
- JSON decode
- sprawdza czy istnieje element o podanej nazwie
- jeśli tak, zmienia jego wartość
- jeśli nie, dodaje element wewnątrz tablicy o kluczy takim jak nazwa zmiennej i określonej dla niej wartości
- JSON encode
- nadpisuje wpis

$_SESSION[" "];
- pobiera ID z COOKIE
- wczytuje cały wpis z bazy dotyczący ID
- JSON decode
- zwraca wartość dla danej nazwy zmiennej

Jeśli COOKIE nie jest obsługiwane można pokombinować ze zmiennymi globalnymi, lub jeśli skrypt będzie uruchamiany np. z konsoli można "symulować" COOKIE tworząc mały plik tekstowy o określonej nazwie zawierający ID.

W celu przyspieszenia wykonywania operacji w bazie można ID inkrementować w jakiś sposób i wykorzystać jeden z algorytmów szybkiego wyszukiwania. Dodatkowo taki skrypt przechowuje sesję do momentu wykonania session_destroy(), i nie znika przy "zamknięciu przeglądarki".

Tak bym to widział (IMG:style_emoticons/default/biggrin.gif) , ale wszystko zależy od tego jak i do czego skrypt wykorzustuje sesje (IMG:style_emoticons/default/wink.gif)

Ten post edytował session 17.11.2014, 13:26:06
Go to the top of the page
+Quote Post
ederlezi
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 17.11.2014

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


Cytat(session @ 17.11.2014, 13:20:26 ) *
Nie da się jednoznacznie odwzorować mechanizmu sesji (przynajmniej w prosty sposób ) w PHP, ale można przeanalizować do czego tak naprawdę wykorzystywane są sesje, czy służą do identyfikacji użytkowników i przechowywaniu przypisanym im wartości, czy tylko i wyłącznie do utrzymywania informacji przekazywanych między skryptami. Innymi słowy czy kilka użytkowników może "jednocześnie" wykonać skrypt, oraz czy wartości zmiennych sesyjnych faktycznie są unikalne i wymagają przechowania aż do końca sesji. Jeśli zależy nam na identyfikacji usera i ewentualnym przechowaniu przypisanych mu informacji sprawdziłbym czy środowisko w którym uruchamiany jest skrypt (skoro nie jest nim przeglądarka) obsługuje cookies. Magazyn danych oparłbym na bazie tekstowej...


Sesje służą tylko do zapamiętania informacji między skryptami, nie zależy nam na identyfikacji usera.
Dodatkowo mam pytanie - jaka korzyść będzie jeśli wykorzystam bazę opartą o pliki tekstowe vs powiedzmy MySQL ? Myślałem o tym, żeby przed rozpoczęciem skryptu tworzyć tymczasową tabelę, a pod koniec skryptu żeby ją usuwać.
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 14:53