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

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: 16.10.2025 - 14:11