2

我通过 Ajax 以 Json 格式在 .aspx 页面中将 userName 和 Pass 传递给 webmethod,现在我想要验证用户并将用户重定向到同一页面并使用 LogedIn 状态更新 LoginView;

我该怎么做?这是我的网络方法

[WebMethod]
    // [ [System.Web.Script.Services.ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet=false)]
    public static void login(object myData)
    {

        JavaScriptSerializer js = new JavaScriptSerializer();
        List<nameVal> myfrm = js.Deserialize<List<nameVal>>(myData.ToString());
      //  MembershipUser u = Membership.GetUser(myfrm.SingleOrDefault(rs=>rs.name=="userName").value);

        if (  Membership.ValidateUser(myfrm[0].value,myfrm[1].value))
        {
            FormsAuthentication.Authenticate(myfrm[0].value, myfrm[1].value);
            //FormsAuthentication.RedirectFromLoginPage(myfrm[0].value, false);

            FormsAuthenticationTicket tkt;
            string cookiestr;
            HttpCookie ck;
            tkt = new FormsAuthenticationTicket(1, myfrm[0].value, DateTime.Now,
            DateTime.Now.AddMinutes(30), true, "my custom data");
            cookiestr = FormsAuthentication.Encrypt(tkt);
            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);

            ck.Path = FormsAuthentication.FormsCookiePath; 
            //  ******* now i must somthing like this: -->  Response.Cookies.Add(ck);
            // but im in static method don't have respons request objects
            // i want respons in json form and proccess the json


           // return "Success";
        }
        else
        {
            //return "Faild";
        }

    }

所以坦克

4

1 回答 1

0

您可以执行以下操作:

FormsAuthentication.SetAuthCookie(myfrm[0].value, createPersistentCookie: false);
return FormsAuthentication.GetRedirectUrl(user.Name, false);

然后在你的javascript中:

var onSuccess = function (result) {
   if (result === null) {
      // login failed
      return;
   }
   window.location.href = result;
};

PageMethods.login(myData, onSuccess);

不幸的是,这仍然有一个ThreadAbortException我似乎无法摆脱的“沉默”,但它似乎并没有引起任何问题。我认为这可能是不可避免的和良性的。

于 2015-03-11T15:42:44.903 回答