65.9K
CodeProject 正在变化。 阅读更多。
Home

控制 ASP.NET Session 中存储的内容

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.48/5 (6投票s)

2007年3月18日

2分钟阅读

viewsIcon

32535

downloadIcon

142

本文提出了一种封装 ASP.NET Session 中存储内容的方法,并提供了一种类型安全的方式来在 Session 中存储对象。

引言

本文提出了一种封装 ASP.NET Session 中存储内容的方法,并提供了一种类型安全的方式来在 Session 中存储对象。

背景

ASP.NET 提供了 Session 对象来跨 HTTP 请求保存信息。但我发现开发者在使用 Session 对象时并不加约束。有时,我们甚至将可以存储在 Context 中的对象存储在 Session 中,仅仅是为了在页面之间传递信息
(例如在 Server.Transfer() 和 Server.Execute() 的情况下)。

本文提出了一种方法,允许您通过 SessionData 类的单个对象来存储 Session 中的数据。为了存储任何对象到 Session 中,开发者不会直接将其存储在 Session 中。相反,将要存储的对象的属性添加到 SessionData 类中。因此,SessionData 类将 Session 中存储的所有对象作为属性公开。优点如下:

1. 它提供了一个集中存储 Session 数据的地点。要存储任何对象到 Session 中,开发者必须向类添加一个属性。因此,您可以控制 Session 中存储的内容。开发者将被劝阻在 Session 中存储任何东西。

2. 提供了一种类型安全的接口来存储 Session 中的对象。

使用代码

将 SessionData 类添加到您的 ASP.NET 项目中。在 ASP.NET 2.0 中,这会被添加到 App_Code 文件夹中。

using System;
using System.Web.SessionState;
/// <summary>

/// This class encapsulates all data stored in session for a user

/// </summary>

public class <code> SessionData 
{
    #region private members
    
    /// <summary>

    /// Session for the user

    /// </summary>

    private HttpSessionState session = null;
 
    #endregion

    #region Constructors
    /// <summary>

    /// Constructor

    /// <param name="session">User Session</param>

    /// </summary>

    public SessionData(HttpSessionState session)
    {
      this.session = session;        
    }
    #endregion

    #region Public Properties
 
    /// <summary>

    /// User. This is an example of property added to SessionData class

    /// </summary>

    public string User
    {
        get
        {
            return (string)this.session["User"];
        }
        set
        {
            this.session["User"] = value;
        }
        
    }
    #endregion
}

在 Session_Start 事件中,添加代码来创建一个 SessionData 对象并将其存储在 Session 中

    void Session_Start(object sender, EventArgs e) 
    {
        // Create an object of SessionData

        SessionData sessionData = new SessionData(Session);
      // Store sessionData in session

        Session["SessionData"] = sessionData;
        sessionData.User = "Sachin";
    }
    

将 SessionData 对象作为所有页面的成员添加。或者,您可以创建一个包含通用功能的基页,并从基页继承页面

public partial class _Default : System.Web.UI.Page 
{
    SessionData sessionData = null;
 .
 .
}

在 Page_Load 事件处理程序中,检索 SessionData 对象并将其存储在成员变量中,以便在整个页面中访问。SessionData 也可以在页面的构造函数中初始化。我认为构造函数比 Page_Load 事件处理程序更好。

this.sessionData = (SessionData)Session["SessionData"]; 

在 Page_Load 事件处理程序中,检索 SessionData 对象并将其存储在成员变量中,以便在整个页面中访问。SessionData 也可以在页面的构造函数中初始化。我认为构造函数比 Page_Load 事件处理程序更好。

 this.sessionData.User = "sachin

关注点

1. 了解到 Session 对象不能被用来初始化成员变量,这很有意思。

public partial class _Default : System.Web.UI.Page </code>
{

SessionData sessionData = Session["SessionData"]; // Cannot access Session object


.
.
}

历史

在此处保持您所做的任何更改或改进的实时更新。

© . All rights reserved.