Asp.net 会议最佳做法

Asp.net 会议最佳做法,asp.net,session-variables,Asp.net,Session Variables,嗨,我在应用程序中使用会话,我想知道在页面上维护会话值的最佳实践是什么。我需要保存会话中存储的值,直到文章返回到特定页面。让我举例说明: Page A: Page B: Sets Session["ID"] = 5 --> Gets Session["ID"] And redirects to Page B and populates data. 我需要B页上的会话[“ID”]保持活动状态,

嗨,我在应用程序中使用会话,我想知道在页面上维护会话值的最佳实践是什么。我需要保存会话中存储的值,直到文章返回到特定页面。让我举例说明:

Page A:                             Page B:
Sets Session["ID"] = 5       -->    Gets Session["ID"]
And redirects to Page B             and populates data.
我需要B页上的
会话[“ID”]
保持活动状态,直到在B页上执行回发。我需要这样做,因为我将使用
会话[“ID”]
的值更新数据库中的数据

我的问题是:
会话[“ID”]
是否能保证在执行回发之前保持其值?它不会死吗?如果是:我可以采取哪些方法来确保它保持其价值

我正在考虑在B页中创建一个私有变量来存储加载页上的
会话[“ID”]
。请让我知道你的想法,谢谢


对不起,我应该说:我不能允许用户修改
ID
。因此,无需查询字符串,谢谢。

不用会话,您可以通过querystring或隐藏的post字段将变量从一页传输到另一页,这样它将与客户端共存,而不会像在会话中一样超时


编辑:如果您不希望用户篡改该值,可以加密/模糊隐藏的post字段。

会话变量保持活动状态,直到会话超时(超时时间在web.config文件中指定)

您需要记住,会话中的持久化数据会占用服务器上的资源,因此需要小心

在asp.net中,您可以使用viewstate在同一页面上跨回发持久化数据

对于您的问题,我建议使用URL查询字符串参数在页面之间传递ID

i、 e.myurl.aspx?ID=5

然后在aspx代码中执行以下操作:

int ID = (int)page.request.params["ID"];
编辑:


如果您担心用户更改ID参数,您可以将业务逻辑放在B页的pageload中,以确保用户有权更改该ID值。

如果会话超时,您的值当然会丢失。您可以将其存储在页面加载中的一个变量中,这样应该可以工作


我真正想知道的是,当你从a页重定向到B页时,为什么不把它作为GET参数传递呢?您可能有一个完全合理的理由,但通常情况下,如果我想将数据从一个页面传递到另一个页面,我会这样做。

默认情况下,会话存储在服务器的内存中。如果用户的会话超时,这可能会有问题。此外,如果将多台服务器用作服务器场,则不能在内存中使用会话,因为不能保证用户每次都使用同一台服务器

保证会话信息不会丢失的最佳方法是将用户的会话持久化到SqlServer数据库

这个环节并不像一些海报所暗示的那样是一个性能杀手。这是一种非常有用的方法,可以方便地维护每个用户的状态


另外,请参阅我对的回答,以了解包装ASP.NET会话对象的好方法。

由于您使用的是ASP.NET,并且希望将数据从一个页面传输到另一个页面,因此也可以使用交叉页面回发

从msdn返回的交叉页:

在某些情况下,你可能会 要将一页发布到另一页。 例如,您可能正在创建一个 收集数据的多页表单 每页上有不同的信息。在里面 在这种情况下,您可以配置某些 控件(实现 IButtonControl接口,例如 要发布到的页面上的按钮控件) 另一个目标页面。这是 称为跨页过账。 跨页面发布提供了一些 与使用转移相比的优势 方法重定向到另一页。 有关详细信息,请参阅将用户重定向到 另一页

资料来源:


这是我们在一些项目中使用的一种方法,效果很好。我不知道它是否适合您的需要,但可能值得一看。

如果我们有一个不需要会话超时的页面,那么按照

资料来源:

我们可以使用


该链接还讨论了各种最佳做法。

我不能允许用户篡改这些值。AQFRONT.com不再可用。
if (Page.PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox)Page.PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
        Label1.Text = SourceTextBox.Text;
    }
}