12

.net4にMVC3アプリケーションがあり、そのセッションは開発環境で機能していますが、本番環境では機能していません。
本番環境では、sessionIDをログに記録しましたが、セッションを設定して取得した瞬間と同じです。

私がセッションを取得しようとすると、私は取得していNull Exceptionます。

これが私がセッションにアクセスする方法です:

public static class HandlersHttpStorage
{
    public static string TestSession
    {
        get
        {
            return HttpContext.Current.Session["time"];//This is null
        }
        set
        {
            HttpContext.Current.Session.Add("time", value);//DateTime.Now.ToString()
        }
    }
}

私が心配しているのは、web.configが同じであっても、本番環境での動作が開発環境とは異なることです。

4

3 に答える 3

15

解決策 1:

リンク: リクエストのルーティング時に HttpContext.Current.Session が null になる

とった。実際、かなり愚かです。次のように SessionStateModule を削除して追加した後、機能しました。

<configuration>
  ...
  <system.webServer>
    ...
    <modules>
      <remove name="Session" />
      <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
      ...
    </modules>
  </system.webServer>
</configuration>

「セッション」はmachine.config.

さて、それが通常のことなのだろうか。それはとても粗野に見えるので、確かにそうではないようです...

解決策 2:

リンク: HttpContext.Current.Session null アイテム

sessionKey が変更されている可能性があります。おそらく次のことを行う必要があります。

HttpContext.Current.Session["CurrentUser"]

または、セッションの有効期限が切れている可能性があります。タイムアウトを確認してください。

http://msdn.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx

または、別の場所からセッション値を設定している可能性があります。通常、1 つのプロパティを介してセッション/コンテキスト オブジェクトへのアクセスを制御します。

static readonly string SESSION_CurrentUser = "CurrentUser";

public static SiteUser Create() {     
 SiteUser.Current = new SiteUser();      
 return SiteUser.Current;
}

public static SiteUser Current {     
 get {         
  if (HttpContext.Current.Session == null || HttpContext.Current.Session[SESSION_CurrentUser] == null) {             
   throw new SiteUserAutorizationExeption();         
  }          
  return HttpContext.Current.Session[SESSION_CurrentUser] as SiteUser;     
 } 
 set {
  if (!HttpContext.Current.Session == null) {
   HttpContext.Current.Session[SESSION_CurrentUser] = value;
  }
 }
} 
于 2012-05-17T04:49:25.963 に答える
3

別の考えられる原因/解決策は、ドメイン名にアンダースコアが含まれている場合、IE が Cookie を保存しないことです (厳密に言えば、ドメイン名にアンダースコアを含めることはできないため、開発中にのみ発生する可能性があります) http://my_dev_server/DoesntWork。Chrome または Firefox はこのシナリオで動作するはずです。また、使用しているドメイン名を変更すると、アンダースコアの問題が解決されなくなります。

参照:

于 2014-02-12T09:47:16.890 に答える