如何在离开一个页面时清除会话

时间:2011-06-21 06:53:06

标签: c# javascript asp.net ajax page-lifecycle

我用大约半小时的时间用谷歌搜索没有命中。场景是,动态脚本保存在其"string"表示存储在会话中的字符串构建器中。只是当用户从一个页面导航到另一个页面时,脚本[来自会话]使用"RegisterStartupScript"进行注册。该脚本在Page的PreRender事件中注册。所以我想在会话中清除这个脚本,而页面导航时btw排除了创建另一个会话变量并清除前一个变量的选项。这是一个开销:(

4 个答案:

答案 0 :(得分:1)

为什么要在Session中存储它,你需要在GET请求之间维护这个脚本吗?

如果只有回发相关,您可以将其存储在viewstate中,因为只有在进行回发时才会保留它。

如果您希望此字符串在GET请求中也可用,您可能需要引入一个不同的变量,该变量具有标识生成脚本的页面的标识符。如果请求的页面与控制变量不匹配,则必须生成新脚本。

答案 1 :(得分:0)

您可以使用JavaScript onUnload()并调用AJAX服务,这将清除服务器端会话。

答案 2 :(得分:0)

用户如何离开页面?您是否可以使用ASP.NET按钮而不是超链接,然后在清除会话变量后在代码中执行重定向?

protected void btnDoSomething_Click(object sender, EventArgs e)
{
    Session["Value"] = String.Empty;
    Response.Redirect(strURL, false);
}

或者您可以在查询字符串中添加一个变量,并在目标页面的Page_Load事件中进行检查:

Webform1.aspx?reset=true

答案 3 :(得分:0)

由于我无法发表评论,请使用onUnload()。

它也会在完整的回发中爆发。 Ajax回发不要开火!

您需要做的是,在onUload函数中保证您只需要清除会话。就像在回发之前将变量isPostBack设置为true一样,onUnload看到变量并且doenst发送请求以清除会话。