2009-08-08 13 views
6

Chciałbym uzyskać listę sesji z localhost.So pisałem

session_start(); 
print_r($_SESSION); 

aktualnie dostęp osoba jest two.one jest z innego komputera, a ostatni z nich jest gospodarzem pc.But na pokazana jest tylko sesja hostowanego komputera. Chciałbym otrzymać listę wszystkich użytkowników sesji.

+0

podobne pytanie i asnwers dostępny tutaj: http://stackoverflow.com/questions/675913/looping-through-all-a-servers-sessions-in-php –

+0

zgadzam się z ogólny sposób myślenia respondentów. Wygląda na to, że szukasz innej technologii. Czy mogę zaproponować gniazda internetowe. –

Odpowiedz

4

Sesje są izolowane od siebie. Sesja jednego użytkownika nie ma dostępu do sesji innego użytkownika. Zmienna $_SESSION odnosi się tylko do sesji bieżącego użytkownika.

Nie sądzę, że istnieje sposób uzyskania dostępu do sesji innego użytkownika, poza ustaleniem, gdzie pliki sesji są fizycznie przechowywane na dysku i analizowania ich ręcznie. UWAGA, ŻE NINIEJSZY DOKŁADNIE NIE CHCESZ ZROBIĆ.

+0

jak zrobić, aby uzyskać wszystkie sesje? w jakiś sposób? –

1

Nie jestem pewien, o co pytasz, ale myślę, że szukasz innej sesji od innego użytkownika. Jeśli tak jest, to nie poleciłbym tego i nie jest to możliwe. Sesje są indywidualne dla każdej sesji przeglądarki (o ile nie określono inaczej za pomocą plików cookie).

Jeśli chcesz odzyskać sesje z własnego użytkownika z innego komputera, to domyślnie zachowanie sesji nie jest tak naprawdę zrobione. Będziesz musiał zaimplementować własnego menedżera sesji, który prawdopodobnie używa bazy danych i śledzi, która sesja jest dla danego użytkownika (prawdopodobnie jest to identyfikator użytkownika), aby mógł załadować go na innym komputerze. Nie poleciłbym tego, ponieważ za każdym razem dostajesz całą kulkę wosku.

Jeśli próbujesz śledzić dane między użytkownikami i komputerami, polecam korzystanie z tabeli ustawień użytkownika. Tutaj możesz śledzić ustawienia, które posiada użytkownik i załadować je do każdej sesji lub nawet do każdej strony, bez konieczności modyfikowania procedury obsługi sesji.

Jeśli z tytułu chcesz uzyskać listę aktualnie aktywnych sesji, po prostu zapisz czas ostatniego trafienia każdego użytkownika w tabeli i wyświetl dane, mając ustawiony czas, gdy sesja zostanie uznana za nieaktywną.

12

Można to łatwo zrobić za pomocą następującego kodu:

<?php 

$sessions = array(); 

$path = realpath(session_save_path()); 
$files = array_diff(scandir($path), array('.', '..')); 

foreach ($files as $file) 
{ 
    $sessions[$file] = unserialize(file_get_contents($path . '/' . $file)); 
} 

echo '<pre>'; 
print_r($sessions); 
echo '</pre>'; 

?> 

Upewnij się, że rozumiesz ryzyko Czyniąc (lub umożliwiając) Ten.

+3

co, jeśli pliki sesji są na wielu poziomach: http://www.php.net/manual/en/session.configuration.php#ini.session.save-path – jondinham

+4

@PaulDinh: True ... Wtedy będziesz musiał zmapować pliki rekursywnie, prawdopodobnie używając "IURATORa SPL" lub podobnego narzędzia 'RecursiveDirectoryIterator'. =) –

1

jest to możliwe tak długo, jak wiesz, identyfikator sesji, którą chcesz obsłużyć. Oto konkretny przykład:

<?php 
// Getting your own session id 
$currentSessionId = session_id(); 

// Closing your own session 
session_write_close(); 

// Switch to the session to handle 
// Here, it is assumed that you pulled the session ID from a storage 
session_id($sessionId); 
session_start(); 

// Do whatever you want with the session ... 

// Close the session once you finished to work with it 
session_write_close(); 

// Restoring your own session session 
session_id($currentSessionId); 
session_start(); 

// At this point, you're back in your own session 
+0

Doskonałe wyjaśnienie, jak zrobić to, o co pyta. – David

Powiązane problemy