2015-01-12 3 views
1

Надеюсь, это простой вопрос. Мне никогда не приходилось сталкиваться с этой проблемой и не знаю, как начать.HttpContext.Current.Session является нулевым на некоторых серверах

Я разработал веб-приложение, которое мои пользователи устанавливают и запускают на своем собственном веб-сервере.

Я реализовал функцию, позволяющую их пользователям изменять pw из pw по умолчанию. Это отлично работает практически на всех серверах. Однако у меня есть новый клиент, который не может его использовать.

Нынешний подход состоит из следующих этапов:

  1. пользователь входит в систему с умолчанию PW
  2. пользователя принимается к виду, где они должны создать новую ПВт (в противном случае их счета приостановлено)
  3. При успешном изменении pw пользователь выводится на главный экран.

Для большинства компаний это работает должным образом. Однако на этом сервере Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name) всегда имеет значение null, поскольку Current имеет значение null. Если я запустил приложение локально и подключился к их db, он работает так, как ожидалось. Но, если я запустил его на своих серверах (тот же код только на своем сервере подключен к тому же самому db), это значение равно null и сбой pw не выполняется.

Какую дополнительную информацию необходимо предоставить для справки по этой проблеме?

UPDATE: Вот код, я звоню: Скрипт вызывается при нажатии кнопки:

var $account = { 
changePw: function (homeUrl, reset) { 
    $(".ui-widget").css("display", "none"); 
    var newPw1 = $("#newPw1").val(); 
    var newPw2 = $("#newPw2").val() 
    if (newPw1 != newPw2) { 
     $("#pwDontMatch").css("display", "block"); 
    } 
    else { 
     var url = rootUrl + "Account/ChangePassword"; 
     var data = { 
      oldPassword: $("#currPw").val(), 
      newPassword: $("#newPw1").val(), 
      reset: "false" 
     }; 
     if (reset) { 
      data = { newPassword: $("#newPw1").val(), reset: "true", userId: $("#userIdTxt").val() }; 
     } 

     $.ajax({ 
      url: url, 
      data: data, 
      success: function (data) { 
       if (data.success != null && data.success == "true") { 
        $("#changeSuccess").css("display", "block"); 
        setTimeout(function() { document.location.href = homeUrl; }, 3000); 
       } 
       else { 
        $("#error").css("display", "block"); 
        if (data.error != null) { 
         $("#errMsg").html(data.error); 
        } 
       } 
      }, 
      failure: function() { 
       $("#error").css("display", "block"); 
      }, 
      type: "POST" 
     }); 
    } 
} 
}; 

И контроллер называется сценарием:

/// <summary> 
    /// This can be called from the change password page or the reset password page 
    /// </summary> 
    /// <param name="form"></param> 
    /// <returns></returns> 
    [HttpPost] 
    public JsonResult ChangePassword(FormCollection form) 
    { 
     JsonResult jr; 

     // ChangePassword will throw an exception rather 
     // than return false in certain failure scenarios. 
     try 
     { 
      bool changePasswordSucceeded; 
       MembershipUser currentUser = Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name, true /* userIsOnline */) ?? 
        Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name); 
       if (currentUser != null) 
       { 
        try 
        { 
         changePasswordSucceeded = urrentUser.ChangePassword(form["oldPassword"], form["newPassword"]); 
         if (changePasswordSucceeded) 
         { 
          currentUser.IsApproved = true; 
          Membership.UpdateUser(currentUser); 

          if (currentUser.ProviderUserKey != null) 
          { 
           var mxUser = new MxUser(currentUser.ProviderUserKey.ToString()); 
           Session["User"] = mxUser; 
           jr = Json(new {success = "true"}); 
          } 
          else jr = Json(new {success = "false",error = "Cannot find ProviderUserKey."}); 

         } 
         else jr = Json(new{success = "false",error = "Cannot update the user password."}); 
        } 
        catch 
        { jr = Json(new{success = "false",error = "Unexpected error in updating the user password."}); } 
       } 
       else jr = Json(new {success = "false", error = "Cannot find the user"}); 
     } 
     catch (Exception ex) 
     { jr = Json(new {success = "false", error = ex.Message}); } 
     return jr; 
    } 

Если нет ничего, то, настройки, config и т. д., чтобы они могли измениться, чтобы это работало?

+0

Единственная причина, я не знаю, почему ' HttpContext.Current' является нулевым во время запроса, использует '.ConfigureAwait (false)' для асинхронных операций ... Так как ваш образец строго синхронный, то u Вероятно, причина ... –

+0

Где находится эта строка: 'Membership.GetUser (System.Web.HttpContext.Current.User.Identity.Name)'? – Win

+0

Проверьте, работает ли приложение под соответствующими настройками (версия фреймворка, интегрированный режим и классический режим). – Stilgar

ответ

0
<system.webServer>  

<remove name="Session"/>  
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition=""/>  


добавить эту конфигурацию и убедитесь, что настройка сеанса имеет InProc или SQL или государственной службы ASP.NET

Смежные вопросы