2009-02-19 26 views
8

Ho letto che una pagina che gira sotto una connessione https non può condividere una sessione InProc (basata sui cookie) con un'altra pagina (o la stessa per quella) in esecuzione sotto normale http. Il mio sito è in esecuzione su Server 2003, IIS 6 e .Net 2.0.come posso condividere una sessione di asp.net tra http e https

Dopo alcuni esperimenti, sembra che una pagina che memorizza i dati in sessione mentre è connessa tramite https può successivamente accedere ai dati anche se in esecuzione in chiaro http.

Quindi, è possibile o devo andare oltre e cercare difetti nella configurazione SSL?

risposta

15

Da MSDN:

Quando un utente si muove avanti e indietro tra le sicuro e aree pubbliche, l'ASP.NET generati cookie di sessione (o URL Se è stata attivata cookie meno Stato della sessione) si sposta con esse nel testo in chiaro , ma il cookie di autenticazione non viene mai passato oltre connessioni HTTP non crittografate per il periodo come la proprietà del cookie protetta è impostata su.

Quindi, in pratica, il cookie possono essere passati sopra HTTP e HTTPS se la proprietà è impostata su Securefalse.

ho evitato questo problema aggiungendo questo al mio file Global.asax:

void Session_Start(object sender, EventArgs e) 
{ 
    if (Request.IsSecureConnection) Response.Cookies["ASP.NET_SessionID"].Secure = false; 
} 

Ciò significa che se il cookie di sessione è stato creato su HTTP, che sarà accessibile solo tramite HTTPS.

+0

Quali sono le implicazioni sulla sicurezza di disattivazione di questo? –

1

La ricerca del problema non presenta molte chiacchiere su di esso finora, ancora in cerca.

Modifica: va bene trovare alcune cose ora.

A destra sembra che funzionerà bene se entrambi i gruppi di pagine sono nella stessa applicazione/sito web.

Quindi andrei avanti e andare avanti, sentendomi rassicurato.

5

IIS impostazione Nella finestra delle proprietà di IIS, sotto la scheda ASP -> Proprietà sessione, c'è un'impostazione per “Nuovo ID su connessioni protette”

ho risolto questo problema intermittente per me stesso impostando questo a falso.

+0

Questo sembra essere sparito in IIS7 - o forse non sono chiaro su dove questo sarebbe stato trovato. Questo è per sito o globale per il server? –

+1

@ chris-moschini In IIS 7 c'è un'icona 'Stato sessione' in 'ASP.NET', quindi se è lì che stai cercando, sei nel posto giusto - e sì, sei corretto; quell'impostazione è andata. –

1

Se una delle soluzioni di cui sopra non funziona, provare questo. L'ho risolto dopo una ricerca di un paio di giorni.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    ... 
    ... 
    CookieSecure = CookieSecureOption.Never 
});