Tôi đã chuyển dịch vụ báo cáo SQL Server 2012 (SSRS 2012) thành các hình thức xác thực để chúng tôi có thể sử dụng nó qua internet.SSRS: Tại sao SKA-cookie tích hợp cho đến khi "Yêu cầu HTTP 400 - Yêu cầu quá dài" xảy ra?
Tôi không thể tìm thấy mẫu xác thực biểu mẫu cho SSRS 2012 ở bất kỳ đâu, vì vậy tôi phải lấy SSRS 2008R2 và chỉnh sửa nó cho năm 2012, cho Single-Sign-On (SSO).
Tại thời điểm đó mọi thứ dường như hoạt động như mong đợi; Tôi thậm chí còn quản lý để có được SSO làm việc trên các lĩnh vực.
Nhưng bây giờ tôi có một vấn đề:
Tôi đã kiểm tra tất cả các báo cáo (hơn 200) với Google Chrome, bởi vì tôi đã phải chèn một JavaScript nhỏ mà làm thay đổi td cửa kích thước cho rằng màn HTML ngay không phải IE5-QuirksMode. Sau khi về báo cáo lần thứ 50, tôi đột nhiên nhận được:
"HTTP 400 Bad Request - Yêu Cầu Too Long"
Sau đó, tôi không thể xem bất kỳ báo cáo khác, không phải ngay cả những người đã làm việc trước đó.
Sự cố có vẻ là do quá nhiều cookie và thực sự, khi tôi xóa một vài cookie "* _SKA" (Session Keep Alive?), Nó bắt đầu hoạt động trở lại.
Vấn đề của tôi bây giờ là tôi không biết những gì gây ra này "cookie tràn". Tôi cũng không biết, nếu đây là lỗi trong Chrome, lỗi trong vani SSRS hoặc lỗi do xác thực biểu mẫu mới.
Tất cả tôi làm trong các hình thức mới-xác thực rằng có một cái gì đó để làm với cookie là thế này:
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;
}
}
}
Và như mã này tạo ra "sqlAuthCookie" mà ta thấy ở phía dưới. Chỉ có một "sqlAuthCookie" vì vậy tôi không nghĩ rằng đây có thể là lỗi xác thực biểu mẫu.
Sự cố dường như là các cookie SKA, rằng AFAIK không liên quan gì đến việc xác thực biểu mẫu và mọi thứ liên quan đến Vanilla SSRS.
Điều duy nhất mà tôi có thể xem là lý do cho việc này là thay đổi thời gian chờ của biểu mẫu-xác thực-cookie thành 720 phút mà tôi đã nhập trong phần xác thực biểu mẫu trong tệp web.config.
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="720" path="/">
</forms>
</authentication>
Có ai biết tôi có thể làm gì để tránh bị tràn cookie theo cookie theo cách thủ công không?
Đó là không có vấn đề đối với tôi mỗi gia nhập, ngoài việc nó là rất khó chịu, nhưng nó sẽ là một vấn đề bởi vì người sử dụng có thể sẽ không thể rất hiểu biết về điều đó ...
Đóng trình duyệt không hoạt động với Chrome. Tôi phải xóa cookie theo cách thủ công. Tôi sẽ sớm thử giải pháp phía máy chủ của bạn. Cảm ơn! – kravits88
Điều này không hiệu quả đối với tôi cho đến khi tôi thay đổi 'c.Path = Request.ApplicationPath +"/Pages ";' đến 'c.Path = Request.Cookies [i] .Path;' – masty
@masty: Funny , Request.Cookies [i] .Path không hoạt động cho tôi. Không phải c.Path = Request.Cookies [i] .Path + "/ Pages"; Bạn đã cài đặt ServicePack 1 + bản cập nhật tích luỹ mới nhất chưa? –