it-swarm.it

Sostituisci sessione php predefinita

Sto creando un'app AngularJs usando joomla in background. L'app AngularJs viene caricata una volta e quindi chiama il server sempre tramite Ajax. Alcune chiamate avvengono contemporaneamente. Se sto usando l'impostazione predefinita PHP sessione in quelle chiamate, php elaborerà una chiamata alla volta. Quindi, ho scritto il mio gestore di sessioni per consentire più di una chiamata alla volta e io vorrei usarlo al posto della sessione php predefinita. C'è un modo semplice per farlo in Joomla o dovrò scrivere la mia classe JSession?

Modifica

<?php
    session_start();
    sleep(10);
    echo "Hello";
?>

Se si chiama questo file due volte nello stesso browser contemporaneamente, la prima chiamata verrà restituita in 10 secondi, la seconda chiamata verrà restituita in 20 secondi. La classe JSession chiama session_start (), quindi joomla ha lo stesso comportamento.

Modifica

Quando utilizziamo l'opzione del database o estendiamo JSessionStorage con il proprio gestore di sessioni, joomla usa session_set_save_handler() e cambia il comportamento predefinito di blocco della sessione. Quindi, ho sbagliato a dire che chiamare session_start implica bloccare la sessione.

3
csbenjamin

Non devi scrivere la tua classe JSession, ma dovrai scrivere una classe che estende JSessionStorage per integrarsi con la gestione delle sessioni di Joomla.

Molto probabilmente ti imbatterai in problemi quando provi a impostare il gestore della sessione tramite la Configurazione globale. Sostituisci JFormFieldSessionHandler con una versione che include il gestore o semplicemente specificalo manualmente in configuration.php. Tuttavia, quest'ultima opzione indica che potresti riscontrare problemi quando in futuro tenterai di utilizzare la configurazione globale.

3
Rouven Weßling

Modifica: sembra che la risposta non sia corretta.

Il gestore di sessioni Joomla predefinito (Database) non blocca la sessione durante l'elaborazione. Quindi non devi preoccuparti di bloccare.

È comunque possibile che si sovrascrivano i dati di quella sessione della prima richiesta con i dati della seconda richiesta.

4
Harald Leithner

Benvenuti nel mondo delle chiamate asincrone. Il mio consiglio è di non utilizzare affatto le sessioni per le chiamate AJAX/RESTful. Il massimo che vorrei fare è avere una sorta di token di autenticazione in modo da sapere chi sta effettuando la chiamata.

3
Andrew Eddie

Joomla ti consente di creare nuovi backend di Session Storage, che potrebbero risolvere il tuo problema. Estendi JSessionStorage con la tua classe di sessione personalizzata, quindi puoi impostare direttamente il gestore nel tuo file configuration.php. (I back-end di archiviazione delle sessioni personalizzate non vengono visualizzati nella configurazione dell'amministratore globale.)

2
Don Gilbert