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

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

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

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

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

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

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

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

 Webform1.aspx?reset=true 

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

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

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

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