好吧,你的朋友说对了一半,但我不相信 Session 本质上是类型安全的。Session 集合存储 Object 的实例。因此,您可以存储任何类型的实例(字符串、int 或自定义登录类),因为它们都派生自 object。但是,当您检索该对象时,您不知道它是什么类型,并且需要在使用它之前仔细地转换它,并进行异常处理。例如,这很好用:
Session["UserName"] = "Freddy";
string theUserName = (string)Session["UserName"];
但是,您可以尝试执行以下操作,这将导致错误。
Session["UserName"] new StrangeDataClass(); //Uh Oh, that's not a string.
string theUserName = (string)Session["UserName"]; //unexpected behaviour based on StrangeDataClass.ToString() implementation.
要解决此问题,您必须执行以下操作:
string theUserName = Session["UserName"] as string;
if (string != null)
//The cast worked...
else
//The cast failed, (or the string stored in session was null)
拥有一个自定义登录对象稍微解决了这个问题,因为您只需要担心一个对象和一个演员表。您还可以使用额外的信息轻松扩展登录对象,并且仍然不必再进行任何强制转换。