Sessioni php

  • Creatore Discussione Creatore Discussione AC1
  • Data di inizio Data di inizio

AC1

Utente Attivo
13 Nov 2017
47
2
8
Barletta
Sto realizzando una web application con
Html
Css
Php
Js


Gli utenti hanno dei livelli divisi per funzionalità;
Mi spiego meglio

Utente1 livello 0 administrator
Utente2 livello 1 limitato

Il mio problema nasce dal fatto che non posso utilizzare due finestre del browser separate con entrambi gli account aperti

Penso il problema risieda nelle variabili di sessione del php


Oggi in un test avevo 3 utenti con profili diversi aperti in 3 finestre dello stesso browser, ma dopo alcune operazioni mi sono trovato con tutte le finestre collegate allo stesso utente con cui ho fatto la prima operazione.


Qualcuno potrebbe darmi una mano ??
 
Stai utilizzando qualche framework o stai facendo tutto a manina?

Comunque, solitamente quando si utilizzano le ACL bisognerebbe settare i soli controller agganciando dei middleware solo dove è opportuno lasciando la logica a parti esterne (libs)...
Mi spiego: (C=controller, M=model, V=View)
Utente1 -> role:admin, permissions:all
Utente2 -> role:user,permissions:restricted

Per semplicità facciamo il solo esempio della visualizzazione del menù, caricando i dati dal DB.
U1 - U2 (sono gli utenti):

ControllerHeader{
1. Chiamo il Model (torna un Obj) senza filtri utenti (solo per semplicità)
2. Verifico che tipologia di permessi ha l'utente
3. Setto i vari parametri
4. Stampo a video (VIEW) il risultato
}

Es. roles
id,ruolo
1,admin
2,user

Es. permissions
id,type
1,all
2,Creare Un nuovo post
3, Modificare Un post
4,Visualizzare i risultati

Es. user,role_permission
role_id,permission_id
1,1,1
2,2,4
1,1,2
1,1,3


Es. menuDB:
id, nome_menu, altri parametri......., role
x, esempio,........................................., ["admin","user"]

ControllerCreaNuovoPost{
1. Chi può fare cosa????? Quindi la prima operazione ipotizzando di aver salvato il nome del metodo nel DB verifichi se l'utente può effettuare questa operazione o meno
2. Effettua i vari controlli e chiamo il Model
3. Output Buffer
}


In questa logica esemplificata, si evince:
  • La view non filtra i dati
  • Il model opera solo sul DB
  • il controller effettua le varie permutazioni
  • la logica deve essere prevista in altri luoghi e non sulle VIEW.

Spero si capisca...

Quindi tornando a:
Qualcuno potrebbe darmi una mano ??

Rispondo: Dipende da come hai configurato la tua APP.
 
Tutto a mano è il codice ....

Il mio problema non è nel db ma a livello di sessioni del php... non si potrebbe restringere le sessione alle finestre del browser ?
 
ok.......
Nelle sessioni aggiungi la tipologia utenza, così da averne diverse. almeno in debug...
 
Per ogni pagina ho inserito

Codice:
<?php

  session_start();
  $u=$_SESSION['u'];
  $profilo = $_SESSION['profilo'];

?>
<html>
    <head>
      <title>HAS: <?php echo $u;?></title>

dove $u è l'user dell'utente loggato e profilo è il livello associato alle funzioni che l'utente può fare.

il test è stato fatto con tre livelli ognuno aperto in tre finestre di chrome
finestra 1 utente 1 inserimento anagrafica
finestra 2 utente2 elaborazione anagrafica
finestra3 utente3 statistiche dei dati inseriti

dopo l'inserimento dei dati anagrafici dell'utente 1, le altre due finestre si sono aggiornate come se si fosse collegato l'utente 1.


In sintesi vorrei gestire i diversi utenti in unico pc e browser
 
3 finestre intese come finestre o come Schede?

Se sono "schede" le sessioni, i cookie, localstorage sono condivisi, se non finestre (new browser) sono separate!
 
utilizzando 3 finestre diverse... altrimenti utilizza il concetto di IMPERSONATE di gitlab...
Ossia tu ti logghi come Admin -> Impersoni Utente1 e così via...

In alternativa potresti scriverti un piccolo helper che in base ad un parametro in get (quindi locale alla SCHEDA) ti fa impersonare un determinato utente...
 
  • Like
Reactions: AC1
utilizzando 3 finestre diverse... altrimenti utilizza il concetto di IMPERSONATE di gitlab...
Ossia tu ti logghi come Admin -> Impersoni Utente1 e così via...

In alternativa potresti scriverti un piccolo helper che in base ad un parametro in get (quindi locale alla SCHEDA) ti fa impersonare un determinato utente...




mi conviene fare un controllo per far accedere una sola persona per volta da quall'ind ip
 
mi conviene fare un controllo per far accedere una sola persona per volta da quall'ind ip
E no... Scusa la domanda, se da casa tua siete in 3 a voler testare l'app solo 1 si può loggare, in quanto uscite dallo stesso indirizzo...

Non è corretta questa policy!
 
Si questo lo so, per l’applicazione che sto sviluppando ha più senso il login di un utente per volta sulla stessa macchina;

Quello che avevo chiesto io inizialmente era per una verifica di test con diversi utenti e per un controllo in caso gli utenti adottassero la soluzione delle schede
 
Si questo lo so, per l’applicazione che sto sviluppando ha più senso il login di un utente per volta sulla stessa macchina;
Allora sarebbe meglio il mac e non l'ip!

3 pc nella stessa rete sono 3 macchine diverse con lo stesso ip d'uscita! Non ha senso....
 
Allora sarebbe meglio il mac e non l'ip!

3 pc nella stessa rete sono 3 macchine diverse con lo stesso ip d'uscita! Non ha senso....


Sto codificando quello che ci siamo detti in questa discussione, voglio capire assieme al tuo aiuto se il mio ragionamento può funzionare.


PREMESSA
l'utente A non può essere loggato su due pc differenti e su un pc deve essere loggato solo un utente per volta.


IDEA
Al momento del login mi memorizzo nel db in una tabella predisposta
user | ip o macaddres | variabile booleana

esempio
utente A | ip: xxx.xxx.xxx.xxx | login si (ho pensato che il logout sarà temporizzato per inattività)

quindi nella pagina di login fare gli opportuni controlli con questa tabella per dare o meno l'accesso al sistema, oppure sai consigliarmi qualche altro metodo
 

Discussioni simili