2014-11-13 23 views
5

ho condotto il seguente test semplice:ASP.Net ReadOnly Sessione

  1. Nel web.config, abbiamo: `sessionState timeout = 40 = modalità InProc`
  2. pagina vuota con il `EnableSessionState =" ReadOnly "` impostato nel tag pagina
  3. Codice Dietro:
protected void Page_Load(object sender, EventArgs e) 
{ 

    if (Session["dt"] == null) 
     Session["dt"] = DateTime.Now; 

    Session["dt"] = ((DateTime)Session["dt"]).AddYears(1); 
    Response.Write(Session["dt"].ToString()); 
} 

il risultato per le parti posteriori pubblicare concorrenti ape come il seguente:

 
1- 13/11/2015 10:00:00 
2- 13/11/2016 10:00:00 
3- 13/11/2017 10:00:00 
4- 13/11/2018 10:00:00 
5- 13/11/2019 10:00:00 
6- 13/11/2020 10:00:00 
... 

Che dice chiaramente che la variabile di sessione viene aggiornata. Su MSDN è possibile trovare il seguente: http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx

È possibile disattivare lo stato della sessione per un'applicazione impostando la modalità dello stato sessione su Off. Se si desidera disabilitare lo stato della sessione solo per una determinata pagina di un'applicazione, è possibile impostare il valore EnableSessionState nella direttiva @ Page su false. Il valore EnableSessionState può anche essere impostato su ReadOnly per fornire accesso in sola lettura alle variabili di sessione.

Eseguiamo operazioni di lettura/scrittura su quasi tutte le pagine della nostra applicazione. Tuttavia, questo impedisce di eseguire due richieste HTTP per lo stesso client contemporaneamente. La prima richiesta dovrebbe essere completata finché il server non elabora la seconda. Dopo alcune ricerche, era chiaramente dovuto a serrature esclusive in sessione. Per curiosità, abbiamo provato a impostare lo stato di sessione su ReadOnly e sembra ancora modificabile che non siano definiti blocchi esclusivi.

Domande:

1- non Readonly significa di sola lettura (per cui v'è un bug in asp qui) o è qualcos'altro?

2- Fino a quando la sessione sembra essere modificabile con lo stato ReadOnly, c'è qualcosa di cui preoccuparsi, pensi che sia sicuro continuare ad usarlo in questo modo sull'ambiente di produzione?

Grazie

+0

Appena incontrato lo stesso scenario. Una pagina contrassegnata con la sessione ReadOnly per velocizzare le richieste AJAX e Session è modificabile in quella pagina. Hai confermato con Microsoft che si tratta di un bug? –

risposta

0

Cambiare le impostazioni della sessione:

<sessionState mode="InProc" > 

a

<sessionState mode="Off" > 

Credo che tu abbia nidificato file web.config in modo forse questa impostazione è stata modificata in un altro file di configurazione .

+0

Non voglio disabilitare la sessione. Voglio solo essere consapevole dell'impatto "reale" dell'impostazione in sola lettura – Goldy

0

Il flag ReadOnly indica solo l'intenzione per la pagina/l'applicazione. È non è una protezione per la variabile Session.

Quando si imposta ReadOnly su una dichiarazione di pagina che si sta dichiarando la pagina non aggiornerà la variabile Session. Ma se poi lo fai, è a tuo rischio.

Il declararion (e il tuo comportamento) aiuta ASP.NET ad essere più veloce. In effetti, il modulo dello stato di sessione implementa un meccanismo di blocco e accoda l'accesso ai valori di stato.

una pagina che ha stato sessione di accesso in scrittura sarà tenere un blocco scrittore sulla sessione fino al termine della richiesta. Una pagina con accesso alla lettura dello stato di sessione occupa solo il blocco del lettore sulla sessione fino al termine della richiesta **.

Dichiarare esattamente l'utilizzo dello stato di sessione che ogni pagina sta per creare è un modo per ottimizzare le prestazioni della pagina e anche un modo per mantenere pulito il codice.

Infine è possibile disattivare completamente la variabile di sessione (lettura e scrittura) impostando:

<sessionState mode="Off"> 

ma io non credo che sia quello che vuoi.

+1

Per quanto riguarda MSDN, è molto vero quello che hai detto sui lucchetti. Tuttavia, quando abbiamo provato la stessa configurazione con la sessione basata su SQL, la modalità ReadOnly ha dato come risultato una sessione di sola lettura. Qualsiasi modifica alla sessione in una pagina con flag ReadOnly verrà semplicemente ignorata. Quindi questo conferma che si tratta di un bug: S – Goldy

+0

Questo è bello! Non lo sapevo –