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ă.
Conform Manualul PHP.net:
Dacă
$_SESSION
(sau$HTTP_SESSION_VARS
pentru PHP 4.0.6 sau mai puțin) este utilizat, utilizațiisset()
pentru a verifica dacă o variabilă este înregistrată în$_SESSION
.
- M-am gândit că acest lucru ar putea ajuta pe alții care se împiedică de acest răspuns: php.net/manual/en/function.isset.php – > .
Eu folosesc o versiune combinată:
if(session_id() == '' || !isset($_SESSION)) {
// session isn't started
session_start();
}
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.
- De ce se utilizează operatorul de comparație
==
în locul operatorului de identitate===
? Ambele returnează numere întregi… – > . - @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. – > . - @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 unint
, deci nu este nevoie. 🙂 – > .
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();
- 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 🙂 – > .
- Ca să fiu corect, codul este destul de explicit. Mulțumesc pentru fragmentul de cod. – > .
Ce metodă este utilizată pentru a verifica dacă SESSION există sau nu?Răspuns: SESSION:
isset($_SESSION['variable_name'])
Exemplu:
isset($_SESSION['id'])
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
).
isset($_SESSION['var'])
simplu. – > Por animuson.