Cum ar trebui să conectezi un session_start() atunci când creezi un plugin?

24 aug. 2016, 22:03:13
Vizualizări: 13.7K
Voturi: 5

În timp ce învățam mai multe despre sesiuni, am înțeles că session_start() ar trebui să fie plasat direct după <?php conform Unde exact trebuie plasat SESSION_START? și am vrut să experimentez creând un plugin care să adauge un session_start() în header.php după <?php. Dar după ce am căutat, am rămas nedumerit în privința procedurii corecte pentru a face acest lucru.

Am căutat despre sesiuni dar am întâlnit o varietate de întrebări și răspunsuri care par să folosească în principal:

Deci, atunci când creezi un plugin care se bazează pe sesiuni pentru a fi adăugate în header.php, care este hook-ul potrivit pentru a adăuga session_start()?

4
Comentarii

Doar câteva idei de luat în considerare legate de sesiuni. Unii spun că ar trebui să o adaugi în config.

Howdy_McGee Howdy_McGee
24 aug. 2016 22:10:13

serios? Nu am auzit niciodată de asta. Nu este rău ca un plugin să modifice config-ul? Asta ar putea duce la o altă întrebare după ce voi căuta.

user9447 user9447
24 aug. 2016 22:11:38

de fapt, ai porni o sesiune doar dacă nu este deja pornită. if ( !session_id() ) { session_start(); } deci nu cred că este foarte important, dar cu siguranță ar trebui verificat înainte de a folosi $_SESSION. Dar sunt curios dacă cineva are o explicație mai bună

bynicolas bynicolas
24 aug. 2016 22:28:43

@bynicolas da, sunt conștient de asta, dar eram mai interesat de unde ar trebui să țintesc sesiunea pentru plasarea ei.

user9447 user9447
24 aug. 2016 22:32:37
Toate răspunsurile la întrebare 3
2

Nu există nicio ieșire regulată și, prin urmare, niciun antet trimis înainte de template_redirect pe partea de front-end. Dacă aveți nevoie de sesiuni și pe partea de back-end, utilizați acțiunea wp_loaded pentru a acoperi ambele.

Exemplu:

add_action( 'template_redirect', function() {

    $status = session_status();

    if ( PHP_SESSION_DISABLED === $status ) {
        // Acesta este motivul pentru care nu vă puteți baza pe sesiuni!
        return;
    }

    if ( PHP_SESSION_NONE === $status ) {
        session_start();
    }

    $_SESSION[ 'foo' ] = 'bar';
});

Rețineți că utilizarea sesiunilor aduce o întreagă serie de probleme foarte complexe în codul dumneavoastră, inclusiv aspecte legate de securitate, scalabilitate (balanțeri de sarcină) și urmărirea problemelor de suport care consumă timp. Nu o recomand.

25 aug. 2016 00:18:34
Comentarii

Ok, dacă sesiunea este proastă, presupun că voi analiza funcția 'set_cookie()' din PHP. Aș presupune că aceeași abordare s-ar aplica ca cea de aici, să folosesc 'template_redirect' sau 'wp_loaded'?

user9447 user9447
25 aug. 2016 01:52:17

Am găsit acest document mic dar interesant, cel puțin în ceea ce privește problemele cu sesiunile în WP: https://pressjitsu.com/blog/wordpress-sessions-performance/

MikeiLL MikeiLL
25 mar. 2017 06:57:17
0

Iată o altă soluție pentru toate versiunile de PHP pe care le puteți găsi în Pluginul CF Geo:

if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
    if(function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
        session_start(array(
          'cache_limiter' => 'private_no_expire',
          'read_and_close' => false,
       ));
    }
}
else if (version_compare(PHP_VERSION, '5.4.0') >= 0)
{
    if (function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
        session_cache_limiter('private_no_expire');
        session_start();
    }
}
else
{
    if(session_id() == '') {
        if(version_compare(PHP_VERSION, '4.0.0') >= 0){
            session_cache_limiter('private_no_expire');
        }
        session_start();
    }
}

Cu această soluție puteți preveni orice problemă legată de sesiuni și o puteți porni oricând aveți nevoie.

21 dec. 2018 15:29:28
1

Putem folosi metoda simplă prin hook-ul init. Scrieți această funcție în fișierul function.php

function register_my_session() {
  if( !session_id() )
  session_start();
}
add_action('init', 'register_my_session');

după adăugarea acestei funcții în function.php puteți seta valori în sesiuni astfel:

$_SESSION['user_country'] = 'india';

Obțineți valoarea din sesiune

echo $_SESSION['user_country'];

pentru a șterge valoarea din sesiune

unset($_SESSION["user_country"]);
8 iul. 2021 13:48:06
Comentarii

Ar trebui să escapi valorile sesiunii înainte de a le afișa.

fuxia fuxia
8 iul. 2021 18:54:53