[Yii1] invalidare sessioni sospese dopo aver rifatto la login

Sto lavorando su di un’applicazione con Yii 1 ed il modulo User per la gestione degli utenti.

Ho la necessità di lavorare su più database per i dati ed un database unico per gli utenti.

Ho quindi deciso di consentire una scelta di cambio database quando si è in logout: si sceglie il database e poi si fa la login, in maniera analoga ad un’altra app (scritta però in pyton) che si usa in azienda.

Questo comporta alcune problematiche che vedrò di risolvere, ma quella che mi preoccupa e non ho idea di come affrontare è la seguente:

Sono in login ed ho sul browser 2 tab aperti in attesa di input per aggiornare i dati. Sul secondo tab decido di cambiare database, quindi mi sloggo, cambio e mi riloggo sul nuovo database. A questo punto torno sull’altro tab e confermo l’invio: visto che sono loggato me lo accetta ed aggiorna i dati sul database sbagliato. Vorrei invece poter mettere un controllo in maniera di rifiutare l’invio in quanto mi sono sloggato/riloggato. In alternativa che rifiuti i dati se il database è sbagliato oppure che li aggiorni su quello corretto, ma mi starebbe meglio un messaggio di errore di sessione scaduta.

La soluzione che avevo pensato era quella di includere anche il nome del database in tutti i form ed in tutte le chiamate, anche quelle ajax, ma sarebbe un bagno di sangue perché l’applicazione ha decine e decine di controller con parecchie azioni ognuno, la cosa sarebbe impraticabile. Andrebbe bene invece inserire un qualcosa - che so - sull’init di ogni controller in maniera da fare questo controllo, ma non ho idea di come si possa fare.

Pensavo anche di utilizzare ad un id di sessione per capire se è cambiata, ma in qualche maniera la baracca dovrebbe sempre portarsi dietro l’id originale, quindi siamo sempre lì. Id oppure database c’è sempre qualcosa da portarsi dietro ad ogni chiamata.

Idee?

Credo di aver trovato una soluzione, devo ovviamente sperimentare meglio.

Ecco com’è strutturato il tutto:

  1. con l’index.php si accede al frontend, poi si fa la login e si viene reindirizzati al backend;

  2. al backend si accede dal file admin.php. Ovviamente l’accesso è consentito solo se si è in login, altrimenti ti sputa in un occhio;

  3. mi basta creare vari file admin01.php, admin02.php… adminNN.php, uno per database, con dentro una definizione di una costante che rappresenta il nome del database e poi l’include di un file comune che consente il lancio dell’applicazione. Il file di configurazione prende questa costante. Accedendo quindi di fatto ad url differenti il problema di scrivere nel database sbagliato non si pone.