HttpContext.Current.Session 在某些服务器上为空

本文关键字:服务器 Current Session HttpContext | 更新日期: 2023-09-27 18:37:13

我希望这是一个简单的问题。我从来没有处理过这个问题,甚至不知道如何开始。

我开发了一个 Web 应用程序,我的用户在他们自己的 Web 服务器上安装和运行该应用程序。

我实现了一项功能,允许他们的用户从默认 pw 更改 pw。这几乎适用于所有服务器。但是,我有一个新客户无法使用它。

当前的方法遵循以下步骤:

  1. 用户使用默认 pw 登录
  2. 用户被带到一个视图,他们必须在其中创建新的 pw(否则他们的帐户将被暂停)
  3. 成功更改 pw 后,用户将转到主屏幕。

对于大多数公司来说,这按预期工作。但是,在这一个服务器上,Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name)始终为空Current因为 null。如果我在本地运行应用程序并连接到他们的数据库,它会按预期工作。但是,如果我在他们的服务器上运行它(相同的代码只是在连接到完全相同的数据库的服务器上),这是空的,并且 pw 更改失败。

我需要提供哪些其他信息才能获得有关此问题的帮助?

更新:这是我调用的代码:按下按钮时调用的脚本:

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;
    }

如果没有,他们需要更改什么设置、配置等才能使其工作?

HttpContext.Current.Session 在某些服务器上为空

<system.webServer>     

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


添加此配置并确保会话设置具有 InProc 或 SQL 或 ASP.NET 状态服务