come posso condividere una sessione di asp.net tra http e https

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) funzionante sotto il normale http. Il mio sito è in esecuzione su Server 2003, IIS 6 e .Net 2.0.

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, è ansible o devo andare oltre e cercare difetti nella configurazione SSL?

Da MSDN :

Quando un utente si sposta avanti e indietro tra aree sicure e pubbliche, il cookie di sessione generato da ASP.NET (o URL se è stato abilitato lo stato di sessione senza cookie) si sposta con esse in testo normale, ma il cookie di autenticazione non viene mai passato su HTTP non crittografato connessioni purché sia ​​impostata la proprietà Secure cookie .

Quindi, in pratica, il cookie può essere trasmesso su HTTP e HTTPS se la proprietà Secure è impostata su false .

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 Session viene creato su HTTP, sarà accessibile solo tramite HTTPS.

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

Ho risolto questo problema intermittente per me stesso impostando questo su false.

La ricerca del problema non presenta molte chiacchiere a riguardo fino ad ora, ancora alla ricerca.

Modifica : va bene trovare alcune cose ora.

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

Quindi andrei avanti e andrei avanti, sentendomi rassicurato.

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

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