7

.NET 1.1 のサーバーで実行されている ASP.NET サイトを、.NET 2.0 で実行されている別のサーバーに移動しました。

ページの 1 つに、期限切れのセッションを検出する次のコードがあります。

  protected void Page_Init(object sender, System.EventArgs e) {  

    if ( Session["XBCPEmail"] == null ) {
      Response.Redirect("signin.aspx?expired=yes");
      return;
    }
  }

(Session["XBCPEmail"] == null) は、ページのボタンの 1 つをクリックした後、1 つの予期しないケースで (セッションが期限切れになったかのように) true として解決されます。ボタンの1つだけで発生します。同じページの他のボタンと同様に、ボタン イベント ハンドラーは、同じページにリダイレクトする次のコードで終了します。

Response.Redirect("cpanel.aspx"); 

チェックした時点でResponse.Redirect("cpanel.aspx");の値は有効な文字列であるため、と の(string)Session["XBCPEmail"]間で何が起こり、が null になるかわかりません。Response.RedirectPage_InitSession["XBCPEmail"]

.NET 2.0 のセッション変数を null にする可能性があるのはどれですか? このコードは 1.1 ではその問題を抱えておらず、2.0 でも、ページ上の 1 つのボタンにしか影響しません。

更新:この問題は、ボタン イベント ハンドラーが外部の .exe プログラムを次のコードで呼び出した場合にのみ発生します。このコードがコメント化されている場合、Session 変数は null ではありません。コマンド ライン プログラムを実行するための外部プロセスの作成は、セッション変数が null であるかどうかにどのように影響しますか?

private string CallBridge3(string task, string arg1, string arg2, string arg3) {

    Process process = new Process();

    process.StartInfo.FileName = MapPath("bridgefcp.exe");
    process.StartInfo.Arguments = "-" + task + " \"" + arg1 + "\" \"" + arg2 + "\" \"" + arg3 + "\"";
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.UseShellExecute = false;

    process.Start();

    string output = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    return output;
  }  

更新 2 : IIS 7.5 マシンを搭載した Windows 2008 R2 に .NET 4.5 をインストールした後、デフォルトで付属していた .NET 2.0 を使用する代わりに、問題が解消されました。

4

9 に答える 9

2

以下のように web.config を更新する必要があります。

<httpCookies requireSSL="false" />
于 2016-05-26T14:41:45.697 に答える
2

I was facing the same issue and tried every option mentioned in the above answers. Finally found that the issue was that we had marked session cookie as secure in our project but were running it with http If the server has not been setup for SSL and you try to mark the cookie secure, a new session will be generated for each request. So finally enabling back https fixed it for me.

于 2018-06-26T09:50:14.220 に答える
1

web.config のセッションがリセットされていると思います (ポストバックごとに新しい SessionID を取得しています)

セッションIDをページのどこかに(テスト用に)配置することで、これをデバッグすることができます

HttpContext.Current.Session.SessionID

これは私の Web サイトの 1 つで発生し、IIS に移動して SessionState パネルを再保存するだけで済みました。

于 2013-11-09T01:07:12.963 に答える
1

web.config ファイルに移動して、sessionstate タグを編集するだけです。requiressl を true から false に設定します。

于 2016-10-22T10:34:42.027 に答える
1

MVC の場合、web.config に以下の構成があることを確認してください。

<httpCookies httpOnlyCookies="true" requireSSL="false" />

<system.web>セクションで

于 2019-05-21T19:59:02.443 に答える