Tôi đã triển khai xác thực ADFS cho ứng dụng asp.net 4.0. Tôi đã lưu trữ ứng dụng trong môi trường sản xuất với cấu hình webfarm. Trang web hoạt động tốt và tất cả các hình ảnh được hiển thị đúng trong trình duyệt IE8. Nhưng khi tôi cố gắng duyệt ứng dụng trong trình duyệt Safari, trang web không hoạt động một số lần và hình ảnh cũng không được hiển thị đúng cách.Kết thúc tệp bất ngờ. Các phần tử sau không được đóng: Cookie, SecurityContextToken. Dòng 1, vị trí 2998
Bằng cách sử dụng Fiddler tôi phát hiện ra rằng đôi khi hình ảnh không được trả lại đúng và nó đi kèm với các lỗi sau:
Exception information:
Exception type: XmlException
Exception message: Unexpected end of file. Following elements are not closed: Cookie, SecurityContextToken. Line 1, position 2998.
Thread information:
Thread ID: 12
Thread account name: CT\acmeweb
Is impersonating: False
Stack trace: at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
at System.Xml.XmlExceptionHelper.ThrowUnexpectedEndOfFile(XmlDictionaryReader reader)
at System.Xml.XmlBaseReader.MoveToEndOfFile()
at System.Xml.XmlUTF8TextReader.Read()
at System.Xml.XmlDictionaryReader.ReadContentAsChars(Char[] chars, Int32 offset, Int32 count)
at System.Xml.XmlBaseReader.ReadBytes(Encoding encoding, Int32 byteBlock, Int32 charBlock, Byte[] buffer, Int32 offset, Int32 byteCount, Boolean readContent)
at System.Xml.XmlBaseReader.ReadContentAsBase64(Byte[] buffer, Int32 offset, Int32 count)
at System.Xml.XmlDictionaryReader.ReadContentAsBytes(Boolean base64, Int32 maxByteArrayContentLength)
at System.Xml.XmlDictionaryReader.ReadContentAsBase64(Int32 maxByteArrayContentLength, Int32 maxInitialCount)
at System.Xml.XmlBaseReader.ReadContentAsBase64()
at System.Xml.XmlDictionaryReader.ReadElementContentAsBase64()
at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver)
at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte[] token, SecurityTokenResolver tokenResolver)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte[] sessionCookie)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
sau đó tôi đã cố gắng để làm theo các liên kết dưới đây đề cập:
http://social.msdn.microsoft.com/Forums/en/Geneva/thread/ea00ec3f-ebdf-427c-929f-d4a196650552
Nhưng nó cũng không làm việc cho tôi. Sau đó tôi đã cố gắng dừng một máy chủ trong cấu hình webfarm và sau đó thấy rằng trang web hoạt động tốt trong trình duyệt IE8 và Safari. Trong trình duyệt IE8, nó hoạt động mọi lúc và tất cả các hình ảnh được hiển thị đúng nhưng trình duyệt Safari không có trong trường hợp cả hai máy chủ trong webfarm đều được bật.
Trên phân tích, tôi thấy rằng từ ADFS tôi nhận được một số thông tin xác nhận quyền sở hữu ở dạng cookie và chiều dài cookie là nhiều hơn. Đối với trình duyệt IE8, chiều dài cookie nhiều hơn và đối với Safari giới hạn cho phép là 4097 ký tự.
Do đó, tôi đã nghĩ tối đa hóa giới hạn cookie cho trình duyệt Safari.
Bất kỳ ai cũng có thể giúp tôi giải quyết vấn đề này bằng cách cung cấp bất kỳ mẫu mã nào.
Cảm ơn & Kính trọng, Santosh Kumar Patro
Vì vậy, câu hỏi thực tế của bạn là "Làm cách nào để tăng giới hạn cookie của Safari từ giới hạn mặc định là 4097 ký tự?" –
Sự cố bắt đầu với kích thước giới hạn của cookie trong trình duyệt safari và do đó việc hiển thị hình ảnh dừng lại và vấn đề được đề cập ở trên xuất hiện trong hình ảnh. Vì vậy, có cách nào để giải quyết vấn đề này. Hơn nữa, vấn đề được đưa vào hình ảnh trong kịch bản webfarm và chỉ dành cho trình duyệt Safari. –