在我的应用程序的身份验证代码中,FormsAuthentication
用于处理最复杂的部分,我已将可能的罪魁祸首缩小到运行应用程序到 BinaryFormatter 的某些机器上的环境问题。
在某些机器上,身份验证过程正确完成并且我的用户已登录。但是,在其他机器上,相同的输入BinaryFormatter
会产生不同的结果(实际上是相同的,除非我遗漏了什么),从而破坏了身份验证过程并且用户永远无法登录在。
在正确的环境中,它会生成一个长度约为373的序列化字符串。在恶劣的环境下,产生的序列化字符串是5,024。问题就在这里。
以下是代码的运行方式:
var formatter = new BinaryFormatter();
var buffer = new MemoryStream();
formatter.Serialize(buffer, HttpContext.Current.User);
这反过来又弄乱了身份验证过程的其余部分,因为它本质上创建了一个包含大约 40,000+ 字节数据的 cookie,而该 cookie 永远不会创建 cookie(需要 4,096 字节或更少才能被浏览器接受)。
我的问题,它不容易测试(告诉我) -两台机器之间有什么不同会导致序列化差异?两者都在 Visual Studio 的 Windows 7 上开发并在内置的 Cassini 服务器上运行,但是否还有其他常见的陷阱会导致Serialize
返回如此截然不同的结果?