Alla ricerca di un hack per impedire di riscrivere un'app senza usare le variabili di sessione

StackOverflow https://stackoverflow.com/questions/279066

  •  07-07-2019
  •  | 
  •  

Domanda

La nostra azienda utilizza un'app che in origine era ColdFusion + Access successivamente convertita in ASP + MS Sql classica per il monitoraggio di attività / tempo chiamato sistema di richiesta. È suddiviso per reparto, quindi ce n'è uno per MIS, marketing, logistica, ecc. Il problema si presenta quando (principalmente i manager) ne usano più di uno alla volta, con 2 finestre del browser aperte. Il sistema di richiesta utilizza variabili di sessione, molte variabili di sessione, " session " viene fatto riferimento 2300 volte nell'applicazione. Quando 2 sono aperti contemporaneamente, come puoi immaginare, ciò causa ogni sorta di anomalie dalle variabili che si confondono.

Nel sistema è presente una richiesta MIS di 3 anni per " fix " questo ed è stato lavorato su da 3 sviluppatori, e ora è il mio turno di provare. Mi chiedevo se qualcun altro ha dovuto lavorare su un progetto come questo, e se ci fosse una sorta di hack per cercare di mitigare alcuni dei problemi. Stavo pensando di forse chiamare qualcosa in global.asa per caricare misc. variabili di sessione dalla stringa di query. Il problema è che succede tutto questo:

If (Session("Application") <> Request("App")) and Request("App") <> "" THEN
  Session("Application") = Request("App")
End If

Osservando le funzioni nei file include, avrai una funzione con 4 parametri, che fa riferimento a 6 diverse variabili di sessione. Quindi hai avuto l'idea, questo sarà doloroso.

Qualcuno ha dovuto fare qualcosa del genere in passato? Qualche hack che hai trovato utile?

È stato utile?

Soluzione

rifattorizza il codice lontano dall'interfaccia Sessione diretta ("qualunque"):

  1. crea un'API per l'accesso alla sessione e sostituisci con essa qualsiasi uso esistente di Session (può essere una 'classe / oggetto' di sessione o solo un file include)
  2. manipola i nomi passati per le variabili di sessione con qualcosa che li renderà unici per dominio in base alle tue esigenze (dipartimento o altro)
  3. prova attentamente

quindi riscrivi il tutto in un secondo momento in un moderno linguaggio web e / o trova un altro lavoro prima che ti chiedano di compiere un altro miracolo ;-)

Altri suggerimenti

Il mio manager (che è un uomo d'affari, non un ragazzo di codice), è infatuato di questo sistema. Non ha fretta di riscriverlo. Se lo riscrivessi, le uniche variabili di sessione utilizzate sarebbero legate all'accesso. Sfortunatamente mi preoccupo più del veloce che del giusto :(

Quante volte " Sessione " è referenziato non significa tanto quanto sembra pensarlo. Inoltre, a meno che non si verifichi un errore di codifica, avere due browser aperti dovrebbe iniziare due sessioni separate e non dovrebbe esserci alcuna "miscelazione". dei valori per quelle sessioni.

Sospetto che potrebbe avere a che fare con qualcos'altro come entrambe le sessioni che leggono dallo stesso cookie o alcuni problemi con le variabili dell'app. Senza vedere l'intera fonte, è difficile da dire. Potrebbe valere la pena scoprire se c'è qualcuno che ha più familiarità con il codice per aiutarti.

E sì, sarà doloroso scavare nel codice, ma almeno ne saprai di più la prossima volta che dovrai correggere qualcosa. ;)

Inoltre, riscrivere non è sempre l'opzione migliore. Non si sa mai che tipo di divertenti logiche aziendali / correzioni di bug si perdono nelle riscritture.

Sono d'accordo con AnonJr

  

Blockquote   avere due browser aperti dovrebbe iniziare due sessioni separate   Blockquote

forse l'uso di variabili globali statiche sta causando la tua perdita di dati

Nella tua classe di sessioni (se ne userai una), quando fai riferimento a ciascuna variabile, usa un prefisso o qualcosa di comune in modo da poter identificare tutte le tue variabili ... quindi puoi scorrere TUTTE le variabili di sessione e forse trovarne altre a cui viene fatto riferimento / creato ...

Private Const PREFIX As String = "MyPrefix_"
Public Shared Property MyVariable() As String
    Get
        Return HttpContext.Current.Session(String.Concat(PREFIX, "MyVariable"))
    End Get
    Set(ByVal value As String)
        HttpContext.Current.Session(String.Concat(PREFIX, "MyVariable")) = value
    End Set
End Property

loop per trovare variabili di sessione che non sono nella tua classe

For Each Item As Object In HttpContext.Current.Session.Contents
    If Not Item.ToString.StartsWith(PREFIX) Then

    End If
Next
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top