0

こんにちは、bodyunload メソッドで [webmethod] を呼び出そうとしています。

ただし、ページの読み込み自体でのみ発生しています。どうすれば防ぐことができますか?

私が使用しているコードは次のとおりです。

[WebMethod]
public static void AbandonSession()
{
    HttpContext.Current.Session.Abandon();
}


<script language="javascript" type="text/javascript">
//<![CDATA[

function HandleClose() {
    PageMethods.AbandonSession();
}

//]]>
</script>

<body onunload="HandleClose()">
....
....
....
</body>

ありがとう、なぐ

4

4 に答える 4

3

以下のコードでテストしましたが、正常に動作しています。

Aspx ページ内

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script type="text/javascript">
        //<![CDATA[

        function HandleClose()
        {


            PageMethods.AbandonSession();
        }

        //]]>    
    </script>

</head>
<body onunload="HandleClose()">
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
    </asp:ScriptManager>
    </form>
</body>
</html>

コードビハインドで

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;

public partial class ClearSessionOnPageUnload : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    [WebMethod]
    public static void AbandonSession()
    {
        HttpContext.Current.Session.Abandon();
    }

}

AbandonSession メソッドにブレークポイントを配置して、アンロード時にヒットしていることを確認できます。

于 2009-08-01T21:26:38.203 に答える
2

あなたがやろうとしていることは悪い考えです。セッションに入れるデータを減らすか、タイムアウトを短くすることを検討してください。

おそらく、ユーザーがページを更新したり、ページから移動したりしたときに onunload が起動することに気付いていないでしょう。したがって、コードが実際に機能すると仮定すると、ユーザーがページを更新すると、セッションが終了します。サイトの他のページにアクセスすると、セッションも終了します。

おそらくあなたが望んでいた機能ではありません!

于 2009-07-07T11:11:41.187 に答える
0

この種のイベントを一貫して処理する方法はありません。セッションが「終了」する原因が多すぎます。これらの最も単純なものは、接続の切断またはクローズです。この場合、起動された JavaScript はサーバーに到達しません。

これを希望どおりに機能させることができたとしても、それが機能するのはごく一部の時間だけです。信頼できない場合は、時間がかかり、別の解決策が必要になる可能性があります。

于 2009-07-07T11:33:10.347 に答える
0

数年経ちましたが、WebMethod を静的にできるとは知りませんでした。

于 2009-07-07T11:36:06.723 に答える