ユーザーがログインページでサインインするasp.netアプリケーションがあります。Employee オブジェクトを作成し、そのページの button_click イベントに loginID を保存します。
アプリケーション全体で Employee オブジェクトを維持するにはどうすればよいですか (毎回 Employee オブジェクトをパラメーターとして渡す必要はありません)。
これは、セッション スコープのアイテムを格納するためのセッション状態である傾向があります。
セッションを超えて従業員オブジェクトを保存すると、オブジェクトに関連するユーザーが実際にはサイトを使用しなくなっている可能性が高くなるため、オブジェクトをメモリに保持しても無意味になる可能性があります。
アプリケーション全体で本当にそれが必要な場合は、アプリケーションの状態を確認する価値があります。
おそらくSession dataの使用を検討したいと思うでしょう。
これは、オブジェクトを特定のセッションに関連付けて永続化する簡単な方法ですが、注意点があります (データ ストアの内容、永続化するオブジェクトの規模や複雑さ、同時接続数によっては、パフォーマンスに影響を与える可能性があります)。あなたが扱っているユーザー)。
与えられたクラスは次のとおりです。
[Serializable]
public class Employee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
セッションに保存します。
protected void DoLogin()
{
Employee employee = new Employee()
{
Id = 1,
FirstName = "John",
LastName = "Smith"
};
// save it to session
Session.Add("Employee", employee);
}
セッションから取得します。「従業員」にキャストする必要があることに注意してください。
protected Employee GetEmployee()
{
if (Session["Employee"] != null)
{
// needs to be cast
return (Employee)Session["Employee"];
}
else
{
return null;
}
}
私は通常、使いやすさのために、このようなものをプロパティにラップします。ただし、通常、セッションではこのようなオブジェクトは必要ありません...おそらく探しているのは、ASP.NET MVC - カスタム IIdentity または IPrincipal を設定することです。