Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Edycja własnej sesji za pomocą handlera po jej rozpoczęciu
Terq
post
Post #1





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

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


Sesję trzymam w redisie.
Zainstalowałem sobie do PHP Predis, który posiada handler do sesji, po jego zarejestrowaniu, z poziomu panelu administratora mogę edytować sesję użytkowników za pomocą:

  1. $handler->write($sid, $sdata);
i innych metod z interfejsu SessionHandlerInterface. Mogę dzięki temu np ręcznie edytować wszystkie zmienne w sesji danego usera.

Niestety, kiedy operacja ta wykonywana jest po rozpoczęciu sesji za pomocą session_start(); mogę edytować wszystkie sesje z wyjątkiem mojej, obecnie trwającej. Tą trwającą mogę edytować tylko klasycznie np poprzez session_update (który mi nie pasuje, bo jest nie do końca użyteczny), czy deklarowanie zmiennych sesji.

Czy jest jakaś opcja żeby to obejść?
Oczywiście swoją sesję mogę edytować przed jej rozpoczęciem, ale w panelu administracyjnym muszę najpierw sprawdzać czy sesja należy do admina, który ma takie uprawnienia, wiec to rozwiązanie odpada.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Domyślam się, że chodzi tutaj o blokowanie pliku sesji. Gdy ją rozpoczniesz nakładana jest blokada na plik więc nie masz możliwości ingerencji w zawartość pliku sesji. Więcej informacji tutaj:
http://php.net/manual/en/function.session-write-close.php
Cytat
[...] session data is locked to prevent concurrent writes only one script may operate on a session at any time.

Zastonowiłbym się zatem czy na pewno możesz ingerować w sesje innych użytkowników w każdej sytuacji. Wydaje mi się, że nie, jeśli sesja jest "w trakcie" (tj. skrypt rozpoczął pracę, ale jej nie zakończył).
Go to the top of the page
+Quote Post
Terq
post
Post #3





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

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


Faktycznie, jeśli przed edycją sesji użyję session_write_close(); mogę już edytować swoją sesję.

W takim razie pewnie masz rację, ze tym, że sesji nie można edytować tylko wtedy kiedy skrypt nadal wykonuje prace.
Wygląda na to, że kiedy skrypt jakiegoś użytkownika wykonuje się bardzo długo, to wtedy nie mogę tej edycji wykonać. Co wtedy należy zrobić i czy jest sens cokolwiek robić?

Ten post edytował Terq 26.02.2015, 15:40:23
Go to the top of the page
+Quote Post

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: 25.12.2025 - 03:05