Ho attivato SQL-Server Reporting Services 2012 (SSRS 2012) per l'autenticazione dei moduli in modo da poterlo utilizzare su Internet.SSRS: Perché i cookie SKA si accumulano finché non si verifica "Richiesta non valida HTTP 400 - Richiesta troppo lunga"?
Non sono riuscito a trovare un esempio di autenticazione di moduli per SSRS 2012, quindi ho dovuto prendere uno SSRS 2008R2 e adattarlo per il 2012 per Single-Sign-On (SSO).
A quel punto tutto sembrava funzionare come previsto; Sono persino riuscito a far funzionare SSO tra i domini.
Ma ora ho un problema:
stavo testando tutti i rapporti (più di 200), con Google Chrome, perché ho dovuto inserire un po 'di JavaScript che altera td border-size per che i display HTML diritto a non IE5-QuirksMode. Dopo circa il rapporto 50 °, ho improvvisamente avuto:
"HTTP 400 Bad Request - Richiesta troppo lungo"
Dopo di che, non ho potuto vedere qualsiasi altro rapporto, nemmeno quelli che ha fatto il lavoro in precedenza.
Il problema sembra essere causato da troppi cookie, e infatti, quando ho eliminato alcuni cookie "* _SKA" (Session Keep Alive?), Ha iniziato a funzionare di nuovo.
Il mio problema ora è che io non so che cosa provoca questo "troppo pieno cookie". Inoltre non so, se questo è un bug in Chrome, un bug in vaniglia SSRS o un bug causato dalla nuova autenticazione dei moduli.
Tutto ciò che faccio nelle nuove forme-di autenticazione che ha qualcosa a che fare con i biscotti è questo:
using System;
using System.Collections.Generic;
using System.Text;
namespace FormsAuthentication_RS2012
{
internal class FormsAuthenticationWorkaround
{
public static void RedirectFromLoginPage(string strUser, bool createPersistentCookie)
{
//string url = System.Web.Security.FormsAuthentication.GetRedirectUrl(strUser, true);
string url = GetRedirectUrlWithoutFailingOnColon(strUser, createPersistentCookie);
SQL.Log("User: '" + strUser + "' ReturnUrl", url);
if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Response != null)
System.Web.HttpContext.Current.Response.Redirect(url);
}
// https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web.Security/FormsAuthentication.cs
// @MSFT: WTF are u guys smoking ?
public static string GetRedirectUrlWithoutFailingOnColon(string userName, bool createPersistentCookie)
{
if (userName == null)
return null;
System.Web.Security.FormsAuthentication.SetAuthCookie(userName, true, "/");
string returnUrl = null;
if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Request != null)
returnUrl = System.Web.HttpContext.Current.Request.QueryString["ReturnUrl"];
if (returnUrl != null)
return returnUrl;
returnUrl = System.Web.Security.FormsAuthentication.DefaultUrl;
return returnUrl;
}
}
}
E come questo codice crea la "sqlAuthCookie" che si vede in fondo. C'è solo un "sqlAuthCookie" quindi non penso che questo possa essere un bug di autenticazione dei moduli.
Il problema sembra essere i cookie SKA, che AFAIK non ha nulla a che fare con l'autenticazione di moduli e tutto ciò che ha a che fare con Vanilla SSRS.
L'unica altra cosa che ho potuto vedere come una ragione per questo è la modifica del timeout del cookie di autenticazione di moduli a 720 minuti che ho inserito nella sezione di autenticazione dei moduli nel file web.config.
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="720" path="/">
</forms>
</authentication>
Qualcuno sa cosa posso fare per evitare di essere sommerso dalla sessione keep-alive biscotti (tranne che per l'eliminazione di quei biscotti manualmente)?
Non è un problema per me di per sé, a parte essendo altamente fastidioso, ma che sta per essere un problema perché gli utenti probabilmente non saranno molto comprensione di quel ...
Chiudere il browser non ha funzionato con Chrome. Ho dovuto cancellare manualmente i cookie. Proverò presto la tua soluzione lato server. Grazie! – kravits88
Questo non ha funzionato fino a quando non ho cambiato 'c.Path = Request.ApplicationPath +"/Pages ";' a 'c.Path = Request.Cookies [i] .Path;' – masty
@masty: Divertente , Request.Cookies [i] .Path non funziona per me. Né c.Path = Request.Cookies [i] .Path + "/ Pages"; Hai installato ServicePack 1 + gli ultimi aggiornamenti cumulativi? –