Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [PHP] Sessioni mescolate tra più client

    Ciao a tutti! Vi pongo questo problema e spero che possiate aiutarmi!
    L'altro giorno mentre gli impiegati dove lavoro utilizzavano un'applicazione da me scritta, sono comparsi dei fatti strani. In pratica vengono mescolate le variabili di sessione su client separati, sembra quasi che tutti stiano lavorando con un'unica sessione di PHP causando così l'inserimento di dati sbagliati ed errori nella procedura.

    Attualmente in produzione utilizziamo la versione 4.3.4.4

    A nessuno è mai capitata una situazione simile?

  2. #2
    Ciao,
    ho letto del tuo problema,
    riflettendoci, in base alla mia esperienza di programmatore Java,
    l'unico caso che può generare ciò che si è verificato sarebbe l'utilizzo in sessione di oggetti o variabili statiche, questo perché la loro visibilità sarebbe a livello di applicativo,
    ovvero una variabile sola per tutte le sessioni.

    Detto questo,
    io ho iniziato a sviluppare in PHP dalla versione 5,
    che è object oriented e quindi permette l'utilizzo di variabili ed oggetti statici.
    Della versione 4.xxx non conosco le caratteristiche.

    Spero di averti aiutato a focalizzare il tuo problema.

    Ciao
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

  3. #3
    Sinceramente ti ho seguito poco!

    Comunque ti ringrazio per la risposta!
    Il fatto è che purtroppo devo gestire il tutto con 2 varibili di sessione
    $_SESSION['operatore']
    $_SESSION['numero_rnd']

    Ma sbaglio o le sessioni dovrebbero essere indipendenti per ogni client? :master:
    Ti prego di spiegarmi un pò meglio il tutto!

    Grazie in anticipo!

  4. #4
    Effettivamente le sessioni dovrebbero (direi sono) uniche per ogni client.
    Per tagliare la testa al toro:
    ogni nuova sessione viene creata quando un nuovo cliente esegue una richiesta
    (se i tuoi utenti usano tutti lo stesso pc condividono la stessa sessione fino a che scade),
    a prova di questo, il server PHP restituisce un SESSIONID univoco.

    Potresti sfruttare il meccanismo e stoccare in sessione variabili tipo:

    $_SESSION['operatore' . SESSIONID]
    $_SESSION['numero_rnd' . SESSIONID]

    Passandoti in querystring o in request il SESSIONID sarai in grado di ricostruire il token univoco
    (operatore + SESSIONID) per recuperare i dati che ti servono e, poichè non esistono SESSIONID uguali, lo farai in totale sicurezza.

    Ciao
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

  5. #5
    Interessante questo!

    Però il problema è che gli operatori usano il proprio pc indipendentemente l'uno dall'altro.
    Controllando i files di sessione che PHP genera sotto la cartella :

    \php\sessiondata

    sono presente effettivamente le sessioni di ogni utente, il problema però è che all'interno ci sono i stessi dati riguardante la variabile $_SESSION['numero_rnd'], mentre per $_SESSION['operatore'] resta univoca.

    Non so se mi sono spiegato...
    Purtroppo questo problema a volte si pone anche su altre applicazioni rivolte al pubblico....

  6. #6
    Dunque,
    fammi capire:
    la variabile $_SESSION['numero_rnd'] contiene dei dati accessibili da qualunque operatore,
    come se fossero i dati di un conto corrente che qualunque operatore di sportello può controllare?

    Se fosse così non dovrebbe essere un problema, nel senso che è successo (ipoteticamente) che sia io che te abbiamo controllato gli stessi dati.

    Il problema potrebbe verificarsi al momento in cui gli operatori variano questi dati?
    nel senso che non riesci a gestire un accesso concorrenziale sulla stessa variabile?
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

  7. #7
    In pratica la variabile $_SESSION['numero_rnd'] è un numero pseudocasuale generato dalla funzione :

    srand((double)microtime()*50000000);
    $_SESSION['numero_rnd']=rand(0,50000000);

    In pratica mi serve per associare i dati in inserimento ad una pratica in lavorazione.
    Dato che per non stravolgere la compatibilità con le vecchie applicazioni ho dovuto mantenere una vecchia tabella.

    Il problema è che questa variabile si condivide per tutti gli utenti (con pc individuali) che stanno inserendo pratiche diverse ma nella stessa azienda....

  8. #8
    Quindi nello stesso momento + utenti potrebbero modificare i dati di quella pratica.

    Non è molto bello.
    potresti accendere/spegnere un semaforo, anche questo in session, per verificare se qualcuno ha aperto la pratica, in modo da non mischiare i dati delle modifiche.

    Pensa ad un bancomat:
    Se mentre tu prelevi, preleva anche tua moglie (fidanzata ec...) sempre dallo stesso conto corrente ma in un'altra città, chi può sapere realmente qual'è l'estratto conto corretto?

    niente,
    blocchi un utente mentre l'altro esegue delle modifiche:
    stile excel: se hai un doc aperto, chi lo apre successivamente si becca un accesso in sola lettura.

    Ciao
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

  9. #9
    Non è che più utenti possono accedere alla stessa pratica, il fatto è che se 3 utenti fanno 3 pratiche diverse per la stessa azienda queste si mescolano perchè la variabile di sessione in questione si condivide tra i 3 client invece di essere univoca per ogni pratica.

  10. #10
    Quindi un utente = 1 pratica,
    ma un utente = una sessione = un SESSIONID

    quindi:
    1 pratica = $_SESSION['numero_rnd' . SESSIONID]

    Penso che abbinando alla pratica il relativo identificativo di sessione potrebbe essere la soluzione che cerchi.

    Che dici?
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.