• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak sprawdzić czy sesja jest ustawiona ?

Object Storage Arubacloud
+3 głosów
333 wizyt
pytanie zadane 20 lipca 2022 w PHP przez mat19 Obywatel (1,580 p.)

Mam problem z klasą sesji, a konkretnie metodą `wantsIssetSession` która sprawdza czy sesja jest ustawiona. Pojawia się błąd Warning: Undefined variable $_SESSION in C:\xampp8.0\htdocs\messbox\messbox-_project\photo.php on line 14.  
Fatal error: Uncaught TypeError: Mess\Session\Session::__construct(): Argument #1 ($session) must be of type array, null given, called in C:

Czy ktoś mógłby mi pomóc rozwiązać ten problem ?

class Session
{
    private array $session;

    public function __construct(array $session)
    {
        $this->session = $session;
    }

    public function startSession(): bool
    {
        return session_start();
    }

    public function wantsIssetSession(): bool
    {

       return isset($this->session['user_id']);
    }
}
$session = new Session($_SESSION);
$start = $session->startSession();
$fill = $session->wantsIssetSession();

if ($fill) {

Przykladowy kod

}else
header(index.php);

 

2 odpowiedzi

+2 głosów
odpowiedź 20 lipca 2022 przez Wiciorny Ekspert (270,230 p.)

Sprawdzić np warunkowo : 
 

if(session_id() == '' || !isset($_SESSION) || session_status() === PHP_SESSION_NONE) {
    // session isn't started
    session_start();
}

https://www.php.net/manual/en/function.isset.php
Co nie co o samej sesji : 
https://www.php.net/manual/en/function.session-id.php
https://www.php.net/manual/en/function.session-status.php
Najkrócej 

if(isset($_SESSION)){
    return true;
  }else{
    return false;
  }

Najlepiej wspomniana funkcja moim zdaniem
 session_id().

session_id() returns the session id for the current session or the empty string ("") if there is no current session (no current session id exists).

komentarz 20 lipca 2022 przez mat19 Obywatel (1,580 p.)
Sesja jest aktywna, chodzi o to, że nie rozpoznaje klucza. Moim zdaniem chodzi o argument konstruktora, bo jak wpiszę $_POST, zamiast $_SESSION to wtedy nie ma bledu tylko sesja nie jest ustanowiona wtedy.
komentarz 20 lipca 2022 przez Wiciorny Ekspert (270,230 p.)

a masz aktywowana sesje w kazdym pliku ?
 

<?php
  session_start();
  echo $_SESSION['key_item'];
?>

bo  nie jest sesja aktywna, gdyz jest niezdefiniowana...  zeby byla sesja aktywna musi zostac uruchomiona...  np 

session_start();
dopiero potem ustawiasz klucz np
$_SESSION['keyPart'] = 'green-light';

 

komentarz 20 lipca 2022 przez mat19 Obywatel (1,580 p.)
Tak, w każdy pliku sesja jest aktywna
komentarz 20 lipca 2022 przez Wiciorny Ekspert (270,230 p.)

sam tak napisałeś 
 

$session = new Session($_SESSION); // aktualnie $_SESSION jest undefined...

więc nie możesz wystartować sesji, bo najpierw powinieneś  zrobić session_start, a nastepnie ustawić sesje. 
Ty startujesz sesje przy wywołaniu funkcji.. więc sesja nie jest aktywna jak plik jest ładowany...  bo do wywołania konstruktora klasy posyłasz undefined. 
 

2
komentarz 20 lipca 2022 przez mat19 Obywatel (1,580 p.)
Ok, dzieki wielkie, zadziałało
komentarz 20 lipca 2022 przez Wiciorny Ekspert (270,230 p.)
nie ma sprawy, jak pisałem aby zmienna była zdefiniowana musi być uruchomiona wcześniej sesja, więc po prostu inna kolejność konstruując klase
0 głosów
odpowiedź 20 lipca 2022 przez VBService Ekspert (253,420 p.)

Undefined variable $_SESSION

zmienna super globalna $_SESSION jest "dostępna"  po wywołaniu session_start()

 

spróbuj np. tak

class Session
{
    private array $session;

    public function __construct()
    {
        session_start();
        $this->session = $_SESSION;
    }

    public function wantsIssetSession(): bool
    { 
       return isset($this->session['user_id']);
    }
}

$session = new Session();

if ($session->wantsIssetSession()) {
 
    //Przykladowy kod  

} else
    header('Location: index.php');

 

Podobne pytania

0 głosów
1 odpowiedź 309 wizyt
pytanie zadane 7 czerwca 2015 w PHP przez HaKIM Szeryf (87,590 p.)
0 głosów
1 odpowiedź 220 wizyt
0 głosów
2 odpowiedzi 1,154 wizyt

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

61,968 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...