【问题标题】:How to clear Session when navigating away from one page离开一页时如何清除会话
【发布时间】:2011-09-19 06:31:45
【问题描述】:

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

【问题讨论】:

  • 你有没有找到解决方案。我也有类似的问题

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


【解决方案1】:

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

【讨论】:

  • 所以onUnLoad 仅在导航离开或回发时执行??
【解决方案2】:

由于我还不能发表评论,请使用 onUnload()。

它也会在完整的回发时触发。 Ajax 回传不会触发!

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

【讨论】:

    【解决方案3】:

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

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

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

    Webform1.aspx?reset=true
    

    【讨论】:

    • 重定向是通过菜单完成的。 menuitem 不做回发,即使它做我不想回发导航离开
    • 向菜单项添加一个选项以使其出现在 QueryString 中并在目标页面的 Page_Load 事件中重置 Session 变量怎么样?你知道怎么做吗?
    • 当您只有一堆页面并且 SEO 很重要时,这不是最好的主意。似乎除了使用 viewstate 之外别无他法,另一个变量作为状态持有者[持有脚本的状态] 感谢 Winston 的回答,对此表示赞赏
    【解决方案4】:

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

    如果只有回发相关,您可以将其存储在视图状态中,因为这仅在进行回发时维护。

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

    【讨论】:

    • Why are you storing this in Session? 这些脚本是根据数据库数据动态生成的。该脚本附加到 gridview 行以进行 Ajax 编辑,使用 web 服务进行更新。我不可能把它放在 ViewState 中。第三个选项来自生成新密钥,所以大不
    • 我并不是说您应该生成一个新密钥,您可以将所有脚本存储在同一个会话变量中,而只需添加一个包含页面标识符的简单控制变量。
    • 这就是我现在的想法,你还有什么想法吗??
    • 我不认为你有更多的选择:)
    • 我没有其他答案,因此不得不接受更接近答案的“答案”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多