Ну, ты друг наполовину прав, но я не верю, что сессия по своей сути безопасна.Коллекция Session хранит экземпляры объекта.Таким образом, вы можете хранить экземпляр любого типа (строку, int или пользовательский класс входа в систему), поскольку все они являются производными от объекта.Однако, когда вы извлекаете этот объект, вы не знаете, что это за тип, и вам нужно тщательно привести его, с обработкой исключений, прежде чем использовать его.например, это работает нормально:
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)
Наличие пользовательского объекта входа в систему немного решает эту проблему, потому что у вас будет только один объект для беспокойства и один объект приведения.Вы также можете легко расширить объект входа в систему с помощью дополнительной информации, и при этом вам больше не придется выполнять приведения.