0

私は Web サイトを開発し、セッションにデータを保存しています。ユーザーがセッションを放棄した場合、セッションにデータを設定する必要があります。

ログアウト.aspx:

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            WebUser user = (WebUser)Session["User"];
            Session["User"] = null;
            Session.Abandon();
            if (user != null)
                SentiWordnetUtils.LogYaz(user.uAdi + "\t Çıkış Yaptı");


            if ((Request.Cookies["OturumRef"] != null))
                Response.Cookies["OturumRef"].Value = string.Empty;

            Response.Redirect("Login.aspx");
        }
        catch (Exception ex)
        {
             LogYaz( "Oturum Sonlandırma Hatası "+ex.Message.ToString());
        }

    }

global.asax の session_end 関数:

  void Session_End(object sender, EventArgs e) 
    {
        List<TBL_SentiWordNet> tempList = (List<TBL_SentiWordNet>)Session["listProcess"];
        if (tempList == null)
            return;
        using (DataClassesDataContext dc = new DataClassesDataContext())
        {
            foreach (TBL_SentiWordNet word in tempList)
            {
                var a = (from i in dc.TBL_SentiWordNets where i.id == word.id select i).FirstOrDefault();

                a.state = 0;

            }
           dc.SubmitChanges();
        }
       Session["listProcess"]= null;
       Session["User"] = null;


    }

このコードはローカルでは機能しますが、IIS では機能しません。a.状態は決してそうではありません 0

web.config:

<?xml version="1.0" encoding="UTF-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <sessionState mode="InProc" timeout="30" />
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
      </assemblies>
    </compilation>
  </system.web>
  <connectionStrings>
    <add name="myconnectionstring" connectionString="Data Source=127.0.0.1;Initial Catalog=mydb;Persist Security Info=True;User ID=userID;Password=password" providerName="System.Data.SqlClient" />
  </connectionStrings>
    <system.webServer>
        <defaultDocument>
            <files>
                <clear />
                <add value="default.aspx" />
                <add value="Default.htm" />
                <add value="Default.asp" />
                <add value="index.htm" />
                <add value="index.html" />
                <add value="iisstart.htm" />
            </files>
        </defaultDocument>
    </system.webServer>
</configuration>
4

1 に答える 1

1

Session End が実際に起動することはありません。これが実行されるのは、ページ リクエストが完了し、リクエストがクライアントに送信された後であるためです。

ページまたは基本ページ クラスで session_end コードを実行する必要があります (このような場合に非常に便利です)。

次の SO リンクを参照してください。

Session_End が発火しませんか?

Session.Abandon() と Session.Clear() の違いは何ですか

于 2013-02-25T13:54:56.587 に答える