判断对象是否被修改的最佳方法是什么?

Dan*_*ert 5 .net c#

我有一个对象作为序列化的 base-64 字符串映射到 cookie。如果对存储在服务器端 cookie 中的对象进行了更改,我只想写出一个新的 cookie。

我想要做的是在从 cookie/初始化对象中提取对象时获取一个哈希码,并将原始哈希码与我将 cookie 标头发送给客户端之前存在的哈希码进行比较,以确保我没有除非进行了更改,否则重新序列化/发送 cookie。

我打算覆盖 .NET 的Object.GetHashCode()方法,但我不确定这是检查对象是否被修改的最佳方法。

有没有其他方法可以检查对象是否被修改,或者我应该覆盖该GetHashCode()方法。

更新我决定接受@rmbarnes 的回答,因为它有一个有趣的问题解决方案,并且因为我决定在他的帖子末尾使用他的建议而不检查修改。然而,我仍然有兴趣听到任何其他人可能对我的场景有任何其他解决方案。

Rob*_*nes 1

在对象构造函数的末尾,您可以将对象序列化为 Base 64 字符串,就像 cookie 存储它一样,并将其存储在成员变量中。

当您想要检查 cookie 是否需要重新创建时,请重新序列化该对象并将这个新的 Base 64 字符串与存储在成员变量中的字符串进行比较。如果已更改,请使用新值重置 cookie。

注意陷阱 - 不要在序列化本身中包含存储 Base 64 序列化的成员变量。我认为您的语言使用类似 sleep() 函数(PHP 就是这样做的)之类的东西来序列化自身,因此只需确保该成员不包含在该函数中即可。

这总是有效的,因为您正在比较要保存在 cookie 中的确切值,并且不需要覆盖 GetHashCode() ,这听起来可能会产生令人讨厌的后果。

综上所述,我可能会放弃测试并始终重置 cookie,与进行更改检查相比,不会有太多开销,并且出现错误的可能性要小得多。