Я включил SQL-Server Reporting Services 2012 (SSRS 2012), чтобы сформировать аутентификацию, чтобы мы могли использовать ее через Интернет.SSRS: Почему SKA-файлы cookie накапливаются до тех пор, пока не появится «HTTP 400 Bad Request - Request Too Long»?
Я не смог найти образец проверки подлинности форм для SSRS 2012 в любом месте, поэтому мне пришлось взять SSRS 2008R2 один и адаптировать его для 2012 года для Single-Sign-On (SSO).
В этот момент все, казалось, работало должным образом; Мне даже удалось заставить SSO работать через домены.
Но теперь у меня есть проблема:
Я проверял все отчеты (более 200) с Google Chrome, потому что я должен был вставить немного JavaScript, который изменяет Td границы размера для что HTML отображается прямо в без IE5-QuirksMode. После того, как о 50-м докладе, я вдруг получил:
«HTTP 400 Bad Request - запрос слишком длинный»
После этого я не мог просматривать любой другой отчет, даже не те, которые сделали работу ранее.
Проблема, похоже, вызвана слишком большим количеством файлов cookie, и действительно, когда я удалил несколько куки «* _SKA» (Session Keep Alive?), Он снова начал работать.
Моя проблема сейчас в том, что я не знаю, что вызывает этот «переполнение печенья». Я также не знаю, если это ошибка в Chrome, ошибка в ванильном SSRS или ошибка, вызванная аутентификацией новых форм.
Все я в новом форм-аутентификации, которая имеет что-то делать с печеньем это:
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;
}
}
}
И как этот код создает «sqlAuthCookie», что один видит в нижней части. Существует только один «sqlAuthCookie», поэтому я не думаю, что это может быть ошибка проверки подлинности формы.
Проблема заключается в том, что файлы cookie SKA, что AFAIK не имеют ничего общего с проверкой подлинности форм и всем, что связано с Vanilla SSRS.
Единственное, что я вижу в качестве причины для этого, - это изменение тайм-аута проверки подлинности-cookie-файлов до 720 минут, которое я ввел в раздел проверки подлинности форм в файле web.config.
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="720" path="/">
</forms>
</authentication>
Кто-нибудь знает, что я могу сделать, чтобы предотвратить получение затопленной сессии Keep-Alive печенье (для удаления этих файлов вручную, за исключением)?
Это не проблема для меня сама по себе, независимо от его высокой степени раздражает, но это будет проблемой, потому что пользователи, вероятно, не будет очень понимание того, что ...
Закрытие браузера не работает для меня с хромом. Мне пришлось вручную удалить файлы cookie. В ближайшее время я попробую ваше решение на стороне сервера. Благодаря! – kravits88
Это не сработало для меня, пока я не изменил 'c.Path = Request.ApplicationPath +"/Pages ";' to 'c.Path = Request.Cookies [i] .Path;' – masty
@masty: Funny , Request.Cookies [i] .Path не работает для меня. Также c.Path = Request.Cookies [i] .Path + "/ Pages"; Вы установили ServicePack 1 + последние кумулятивные обновления? –