Detectează dacă există sesiune PHP (Programare, Php, Sesiune)

Pablo a intrebat.

Facebook oferă acum abonamente utilizatorilor, astfel încât să puteți primi actualizări în timp real cu privire la modificări. Dacă aplicația mea primește o actualizare, am de gând să o stochez în baza de date. Aș dori, de asemenea, să detectez dacă sesiunea lor există. Dacă da, atunci aș putea actualiza datele și acolo.

ID-urile sesiunii mele sunt MD5(fb_id + secret), astfel încât aș putea edita cu ușurință sesiunea lor. Întrebarea este cum pot detecta dacă sesiunea există.

Comentarii

  • La a cui sesiune vă referiți? De unde? Creată de către cine? –  > Por Pekka.
  • Ce înseamnă „secret hashed”? Dacă este un hașurat corect, nu poți recupera fb_id-ul. –  > Por NullUserException.
  • Sesiunea utilizatorului, de pe serverul meu, creată de serverul meu… îmi pare rău, am crezut că este un dat –  > Por Pablo.
  • @Pablo dacă serverul tău creează deja o sesiune, de ce ai nevoie de ajutorul nostru pentru a detecta dacă există? Nu înțeleg. Vrei să spui dacă utilizatorul pentru care primești o actualizare are o sesiune pe partea ta? Doar managementul utilizatorilor tăi poate spune asta, nu-i așa? –  > Por Pekka.
  • Sunt de acord cu Pekka, de ce ai avea nevoie să știi dacă există o sesiune? Dacă doar creați întotdeauna o sesiune în același mod, nu puteți verifica dacă o anumită variabilă stocată în sesiune există sau nu? Este o simplă isset($_SESSION['var']) simplu. –  > Por animuson.
6 răspunsuri
Sebastián Grignoli

Conform Manualul PHP.net:

Dacă $_SESSION (sau $HTTP_SESSION_VARS pentru PHP 4.0.6 sau mai puțin) este utilizat, utilizați isset() pentru a verifica dacă o variabilă este înregistrată în $_SESSION.

Comentarii

Reign.85

Eu folosesc o versiune combinată:

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

Toto

Dacă sunteți pe php 5.4+, este mai curat să folosiți session_status():

if (session_status() == PHP_SESSION_ACTIVE) {
  echo 'Session is active';
}
  • PHP_SESSION_DISABLED dacă sesiunile sunt dezactivate.
  • PHP_SESSION_NONE dacă sesiunile sunt activate, dar nu există niciuna.
  • PHP_SESSION_ACTIVE dacă sesiunile sunt activate și există una.

Comentarii

  • De ce se utilizează operatorul de comparație == în locul operatorului de identitate === ? Ambele returnează numere întregi… –  > Por micaball.
  • @micaball The == operator înseamnă „de valoare egală”. === înseamnă „de valoare și tip egale”. În această comparație căutăm doar valori adevărat/false, deci == este cea mai bună alegere. –  > Por elbrant.
  • @micaball (Prea) multe funcții php pot returna un amestec de tipuri de valori (Un clasic fiind strpos()). În acest caz, ar avea efectiv sens să se verifice tipul de valoare. session_status() returnează întotdeauna un int, deci nu este nevoie. 🙂 –  > Por Toto.
Sabry Suleiman
function is_session_started()
{
    if ( php_sapi_name() !== 'cli' ) {
        if ( version_compare(phpversion(), '5.4.0', '>=') ) {
            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
        } else {
            return session_id() === '' ? FALSE : TRUE;
        }
    }
    return FALSE;
}

// Example
if ( is_session_started() === FALSE ) session_start();

Comentarii

  • Ar trebui să adăugați o descriere care să însoțească codul, chiar dacă este scurtă. Postările cu doar cod fără explicații sunt prost văzute 🙂 –  > Por MBorg.
  • Ca să fiu corect, codul este destul de explicit. Mulțumesc pentru fragmentul de cod. –  > Por s3c.
Rushabh Koradia

Ce metodă este utilizată pentru a verifica dacă SESSION există sau nu?Răspuns: SESSION:

isset($_SESSION['variable_name'])

Exemplu:

isset($_SESSION['id'])

s3c

Codul original este de la Sabry Suleiman.

L-am făcut un pic mai frumos:

function is_session_started() {

    if ( php_sapi_name() === 'cli' )
        return false;

    return version_compare( phpversion(), '5.4.0', '>=' )
        ? session_status() === PHP_SESSION_ACTIVE
        : session_id() !== '';
}

Prima condiție verifică Server API în uz. Dacă se utilizează interfața de linie de comandă, funcția returnează false.

Apoi, returnăm rezultatul boolean în funcție de funcția versiunea PHP în uz.

În istoria străveche, trebuia pur și simplu să verificați session_id(). Dacă este un șir gol, atunci sesiunea nu este pornită. În caz contrar, este.

De la versiunea 5.4 până cel puțin la versiunea actuală 8.0, norma este de a verifica session_status(). Dacă nu este PHP_SESSION_ACTIVE, atunci fie sesiunea nu este încă începută (PHP_SESSION_NONE) fie sesiunile nu sunt disponibile cu totul (PHP_SESSION_DISABLED).

Tags:,