2010-04-27 8 views
6

Hm, to może zabrzmieć trochę dziwnie. Mieliśmy pewne problemy z konkretną przeglądarką w bardzo specyficznym stanie i ostatecznie zawęziliśmy problem do faktu, że nie wykonywaliśmy poprawnie starych sesji po wykonaniu session_regenerate_id(). Sądzę, że rozwiązałem ten problem, wykonując teraz session_regenerate_id (true), ale jak można zweryfikować, że poprzednie sesje naprawdę już nie istnieją? Ktoś zasugerował cURL, ale nie mogę znaleźć sposobu na obejrzenie ich dokumentów. Niestety (?) Szef nie przyjmuje "po prostu działa" na odpowiedź, więc naprawdę doceniam każdą radę!jak sprawdzić, czy stara sesja jest naprawdę zniszczona?

+0

Wygląda na to, że ludzie z SO mają tendencję do pisania pytań, których nie rozumieją. co dokładnie masz na myśli pod "sesją"? Jakie materiały mają znaczenie? I dlaczego jesteś tak pewny, że naprawdę ograniczyłeś problem? –

Odpowiedz

4

Domyślnie session_regenerate_id(); zastąpi tylko bieżącą sesję na nową. Tak więc stary plik sesji nie musi zostać usunięty. Ale wykonanie session_regenerate_id(true); spowoduje usunięcie starego pliku sesji. (http://php.net/session_regenerate_id)

Aby sprawdzić, czy stara sesja zostanie usunięta można zrobić coś takiego

<?php 
$file=ini_get('session.save_path')."/sess_".session_id(); 
$gotDeleted = file_exists($file); 
?> 

Można również zrobić session_destroy(). Jeśli zachowujesz niektóre zmienne, możesz wypróbować unset() dla konkretnych wartości $_SESSION.

+0

Tak, w większości przypadków jest to prawda, ale w niektórych szczególnych przypadkach to nie zadziała. Zwłaszcza gdy używasz kodu session_name ("WHATEVERNAMESESSID"). Nie ma sposobu, aby go usunąć. Sesja pozostaje tam na zawsze, dopóki przeglądarka (firefox) nie jest już blisko. Bardzo dziwny! – B4NZ41

1

Aby upewnić się, że dane sesji zniknęły, należy spojrzeć na backend oszczędzania sesji. Domyślnie przechowuje sesje jako zwykłe pliki dyskowe (dlatego na przykład sesja przeżywa restart komputera). Możesz przejrzeć je i sprawdzić, czy odpowiadające sesji, którą obserwujesz, zostały skutecznie usunięte.

Lub, jeśli jest to taka ważna informacja, możesz zbudować własne zaplecze sesji (co nie jest wcale trudne), aby mieć jeszcze większą kontrolę i więcej opcji debugowania (możesz ręcznie zniszczyć dane i można dodać wyciągi z logów, aby wykazać, że dane zostały usunięte).

Zobacz tutaj: http://php.net/manual/en/function.session-set-save-handler.php

lub tutaj: http://devzone.zend.com/article/141

Powiązane problemy