○ Sessionオブジェクトに格納されたデータの削除

Sessionオブジェクトにどんどんデータを追加するとサーバーのメモリがひっ迫してきます

Session["test"]="data";
Session["test2"]="data";

のようにいくらでも追加できます。
そこで、ページ移動時に必要のないデータを削除する方法を作成します


下のコードでは、永続的に必要なデータは永続と判定できるように、
何かしらのクラスの中に入れて、Sessionオブジェクトに追加しています。
永続以外の総てのデータはページ移動時に削除されるようにすることで、
Sessionオブジェクトのデータが膨らまないようにしています。



■ aspx抜き出し
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //永続データ以外の削除
        session_mgr.clean(Page);
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        //永続データの設定
        session_mgr.setData(Page, "test", TextBox1.Text);
        Response.Redirect("WebForm1.aspx");
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        //永続データの取出し
        string str = (string)session_mgr.getData(Page, "test");
        if (str != null)
        {
            TextBox2.Text = (string)str;
        }
    }
}



■ クラス
class session_mgr
{
    private object val;
    private static string unique = "_session_mgr";
    private session_mgr(object _val)
    {
        val = _val;
    }
    //永続データの設定
    public static void setData(System.Web.UI.Page page, string key, object data)
    {
        page.Session[key + unique] = new session_mgr(data);
    }
    //永続データの取出し
    public static object getData(System.Web.UI.Page page, string key)
    {
        object pos = page.Session[key + unique];
        if (pos is session_mgr)
        {
            return ((session_mgr)pos).val;
        }
        return null;
    }
    //永続データ以外の削除(ポストバック時は削除しない)
    public static void clean(System.Web.UI.Page page)
    {
        //ポストバック以外の場合は、永続データ以外を削除する
        if (!page.IsPostBack)
        {
            for (int i = page.Session.Count - 1; i >= 0; i--)
            {
                string key = page.Session.Keys[i];
                if (!(page.Session[key] is session_mgr))
                {
                    page.Session.Remove(key);
                }
            }
        }
    }
}


▲トップページ > Visual BASIC と C#