czy istnieje krótka sztuczka kodu, aby sprawdzić, czy sesja się rozpoczęła, a jeśli nie, to załadować? Obecnie pojawia się komunikat "sesja już się rozpoczęła ...", jeśli uruchomię sesję niezależnie od sprawdzenia.Załaduj session_start() tylko wtedy, gdy sesja nie istnieje?
Odpowiedz
isset
jest zazwyczaj właściwy sposób, by sprawdzić, czy predefiniowane zmienne są aktualnie zdefiniowane:
Jeśli używasz wersji PHP przed 5,4,
zazwyczaj można uciec, a jego kuszący po prostu wykonaj poniższy kod, ale pamiętaj, że jeśli z jakiegoś powodu sesje zostaną wyłączone, funkcja session_start() będzie nadal wywoływana, co może prowadzić do błędów i niepotrzebnego debugowania, ponieważ tablica $ _SESSION nie może zostać utworzona.
if(!isset($_SESSION)){session_start();}
jeśli chcesz uwzględnić sprawdzając, czy sesje są wyłączone z jakiegoś powodu, można wyciszyć się komunikat o błędzie, należy ustawić zmienną sesji testowej, a następnie zweryfikować to było ustawione. Jeśli nie, możesz zakodować w reakcji na wyłączone sesje. Będziesz chciał zrobić to wszystko na początku skryptu lub w jego pobliżu. Tak przykładem (działa różnie w zależności od ustawienia obsługi błędów):
if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
//handle disabled sessions
}
Jednakże, jeśli używasz PHP w wersji 5.4 lub nowszej,
Można użyć funkcji session_status(), lepszym rozwiązaniem jako uwzględnia wyłączone sesje i sprawdza, czy sesja już istnieje.
if (session_status() === PHP_SESSION_NONE){session_start();}
UWAGA że PHP_SESSION_NONE jest stały zestaw PHP i dlatego nie muszą być zapakowane w cudzysłowach. Oblicza liczbę całkowitą 1, ale jako stałą, która została specjalnie ustawiona, aby wyeliminować potrzebę magicznych liczb, najlepiej przetestować względem stałej.
Wiele osób po prostu używa @session_start()
, aby wyłączyć ostrzeżenie, że sesja już się rozpoczęła. Alternatywą jest zwykle:
if (session_status() === PHP_SESSION_NONE) session_start();
if (session_id() === "") { session_start(); }
spróbować tego warunku
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
Jeśli tylko chcemy uniknąć błędu, użyj @ przed przykład funkcja :
@session_start();
Witam, witam w SO. Czy mógłbyś edytować swój post, aby wyjaśnić, co robi twój kod i jak rozwiązuje problem PO? Odpowiedzi tylko na kod są odradzane i mogą zostać skasowane. –
Sprawdzenie dla istniejącej sesji przed rozpoczęciem nowej:
// # if phpversion() is >= 5.4
if(phpversion() >= 5.4) {
// # check session_status() function for value 'PHP_SESSION_NONE'
if(session_status() === PHP_SESSION_NONE) {
session_start();
}
} else { // # maintain backwards compat. with PHP versions older than 5.4
// # if $_SESSION object if NOT set, start a new session!
if(!isset($_SESSION)) {
session_start();
}
}
- 1. Jak wstrzykiwać fasoli tylko wtedy, gdy istnieje
- 2. Upuść klucz obcy tylko wtedy, gdy istnieje
- 3. Tworzenie tabeli SQLite tylko wtedy, gdy jeszcze nie istnieje
- 4. mod_rewrite regex pasuje tylko wtedy, gdy pewien ciąg NIE istnieje.
- 5. mysql utworzyć widok tylko wtedy, gdy jeszcze nie istnieje
- 6. Makefile wykonuje phonytargets pliku tylko wtedy, gdy plik nie istnieje
- 7. Jak powiązać obsługę zdarzeń tylko wtedy, gdy jeszcze nie istnieje?
- 8. Importuj moduł w Pythonie tylko wtedy, gdy jeszcze nie istnieje
- 9. wybrać tylko wtedy, gdy pusty
- 10. SQLite usunąć z tylko wtedy, gdy istnieje tabela
- 11. Jak odmapować tylko wtedy, gdy istnieje odwzorowanie w vim
- 12. Eloquent Laravel - pobieranie wyników tylko wtedy, gdy związek istnieje
- 13. Wyświetl element tylko wtedy, gdy istnieje inny element.
- 14. Requirejs - ładowanie modułów tylko wtedy, gdy warunek jest prawdziwy
- 15. Zastosuj funkcję tylko wtedy, gdy isJust
- 16. Wybierz wiersz nadrzędny tylko wtedy, gdy nie ma dzieci
- 17. RXJS - uruchamiać timer tylko wtedy, gdy nie jest używany?
- 18. Ruby: Przypisanie wyjścia funkcję tylko wtedy, gdy nie zwraca nil
- 19. opcje_sortowania są stosowane tylko wtedy, gdy query_string nie jest pusty?
- 20. Jak wykonać DDL tylko wtedy, gdy tabele nie istnieją?
- 21. Jak mogę uruchomić zadanie ansibli tylko wtedy, gdy plik lub katalog NIE istnieje?
- 22. Używając lodash, wypychaj do tablicy tylko wtedy, gdy wartość nie istnieje?
- 23. Utwórz folder z wsadem, ale tylko wtedy, gdy jeszcze nie istnieje
- 24. Co właściwie powoduje wywołanie Session_Start?
- 25. Neo4j scalanie zwracaj coś tylko wtedy, gdy zostało utworzone
- 26. Celuj w pierwszy element tylko wtedy, gdy ma inne rodzeństwo.
- 27. Składanie komentarzy tylko wtedy, gdy plik jest otwierany w Vim
- 28. Codeigniter i PHP sprawdź czy sesja istnieje
- 29. Unwrap opcjonalnego tylko wtedy, gdy jest on obecny
- 30. Dziecko MDI jest widoczne tylko wtedy, gdy WindowState jest zmaksymalizowane
dziękuję za wzięcie pod uwagę rozwiązania dla php <5,4 – Houston
@nick dobrze, powiedziałbym, że znalazłeś błąd w wersji 5.4.16 lub bardziej prawdopodobne, że masz dziwną konfigurację php/server. Tak czy inaczej, dobrze jest załatwić swoje najgorsze przypadki: D – Rooster