Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [session handler] czytanie zmiennych sesji, php dziwnie przechowywuje zmienne sesji
aleksander
post 27.01.2005, 00:05:33
Post #1





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


Witam,

mam napisanego session handlera, który dane przechowywuje w mysql. W artykule o SH na php.pl przeczytałem, że zmienne sesyjne są serializowane. Chciałem zrobić moduł "userzy on line" wiec wybrałem wszystkie wpisy z DB i probowalem odserializowac. Okazało się, że te dane nie są zaserializowane tylko zapisane w jakiś dziwny sposób. Czy ktoś może mi odpowiezieć, jak taki string, który przedstawiam poniżej zamienić na tablice assoc?
Kod
userid;s:1:"1";login;s:4:"olek";roles;s:54:"editMenus;viewNews;manageNews;viewComments;addComments";groupid;s:1:"1";groupName;s:13:"Administrator";lang;s:2:"pl";
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
aleksander
post 27.01.2005, 16:21:11
Post #2





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


muszę zrobić małe sprostowanie. Otóż gdy pisałem pierwszego posta byłem chyba bardzo śpiący bo podałem zły string. Prawidłowy string( czyli ten co zapisuje metoda write sesji) jest następujący:
Kod
userid|s:1:"0";login|s:9:"anonymous";roles|s:41:"useAuth;viewNews;viewComments;addComments";groupid|s:1:"2";groupName|s:10:"U?ytkownik";lang|s:2:"pl";

Ace zapodał mi takie wyrażenie regularne. Działa, jednakże rozwiązuje problem w sposób bardzo nieelegancki i raczej nie będę mógł go użyć w swojej aplikacji. Jeżeli ktos ma pomysł, jak ten string odczytać, proszę o rady smile.gif
  1. <?
  2. $pattern = '/(.*?)|(.*?):(.*?):\"(.*?)\";/';
  3. preg_match_all( $pattern , $result['session_value'], $match );
  4. print_r( $match );
  5. ?>
Rezultat:
Kod
Array
(
    [0] => Array
        (
            [0] => userid|s:1:"0";
            [1] => login|s:9:"anonymous";
            [2] => roles|s:41:"useAuth;viewNews;viewComments;addComments";
            [3] => groupid|s:1:"2";
            [4] => groupName|s:10:"U?ytkownik";
            [5] => lang|s:2:"pl";
        )

    [1] => Array
        (
            [0] => userid
            [1] => login
            [2] => roles
            [3] => groupid
            [4] => groupName
            [5] => lang
        )

    [2] => Array
        (
            [0] => s
            [1] => s
            [2] => s
            [3] => s
            [4] => s
            [5] => s
        )

    [3] => Array
        (
            [0] => 1
            [1] => 9
            [2] => 41
            [3] => 1
            [4] => 10
            [5] => 2
        )

    [4] => Array
        (
            [0] => 0
            [1] => anonymous
            [2] => useAuth;viewNews;viewComments;addComments
            [3] => 2
            [4] => U?ytkownik
            [5] => pl
        )

)


UPDATE: a więc problem rozwiązany:
  1. <?php
  2. $string = 'userid|s:1:\"0\";login|s:9:\"anonymous\";roles|s:41:\"useAuth;viewNews;viewComments;addComments\";groupid|s:1:\"2\";groupName|s:10:\"U?ytkownik\";lang|s:2:\"pl\";';
  3. $pattern = '/(.*?)|(.*?\";)/';
  4. preg_match_all( $pattern , $a, $match );
  5. $keys = &$match[1];
  6. $vals = &$match[2];
  7. $return = array();
  8. foreach( $keys as $key => $val )
  9. {
  10. $return[$val] = unserialize( $vals[$key] );
  11. }
  12. echo &#092;"<pre>\";
  13. print_r( $return);
  14. echo &#092;"</pre>\";
  15. ?>
Kod
Array
(
    [userid] => 0
    [login] => anonymous
    [roles] => useAuth;viewNews;viewComments;addComments
    [groupid] => 2
    [groupName] => U?ytkownik
    [lang] => pl
)
Gratulacje przyjmuję od poniedziałku do piątku w godzinach od 18:00 do 22:00 winksmiley.jpg

Ten post edytował olo 27.01.2005, 17:30:37
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 18:33