![]() |
![]() |
![]()
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ę. |
|
|
![]() |
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 14:11 |