2

在我的 ASP.Net 应用程序中,我使用 viewstate 来存储网格的数据,我使用公共类来创建 viewstate 对象,如下所示。

public static PageViewState CurrentViewState
    {
        get
        {
            if (_app == null)
            {
                Initialize();
            }
            return _app;
        }
    }

    /// <summary>
   /// Creates new object for singleton class
    /// </summary>
    private static void Initialize()
    {
        PageViewState _viewstate = new PageViewState();
        _app = _viewstate;

    }

    /// <summary>
    /// Returns viewstate for specified page name
    /// </summary>
    /// <param name="_page">string : Name of the page</param>
    /// <returns></returns>
    public object this[string _page]
    {
        get
        {
            if (ViewState[_page] != null)
                return ViewState[_page];
            else
                return null;
        }
        set
        {
            ViewState[_page] = value;
        }
    }

我使用的是静态属性,当多个用户在 aspx.cs 中访问它时是否安全。

Datatable _dtable = (Datatable)PageViewState.CurrentViewState["MyPage"];

ViewState 以隐藏字段的形式将数据存储在客户端,因此对于每个用户来说它应该是唯一的,我对此是否正确。

4

3 回答 3

2

ViewState 将数据存储在客户端,这是安全的。

于 2012-12-26T09:24:27.917 回答
1

是的,因为它在客户端存储数据,即用户正在他的机器上查看的页面。

因此,您将看到同一页面的不同版本(在视图状态数据的意义上),而我将看到不同的版本。

于 2012-12-26T09:28:07.897 回答
1

ViewState 是表示控件状态的加密字符串,它处于页面级别。

这是为每个具有隐藏输入字段的页面呈现的。

 <input type="hidden" id="__ViewState" value="uxudhk.." />

不同用户请求的每个页面将在页面中具有不同的隐藏字段。所以这总是安全的。如果您的 ViewState 被修改或更改,您将收到像 InValid ViewState 这样的服务器端错误。

于 2012-12-26T09:34:11.677 回答