none
怎样用Ajax和FormsAuthentication类实现用户登录功能? RRS feed

  • 问题

  • 怎样用Ajax和FormsAuthentication类实现用户登录功能?
    页面上采用HTML控件<input type="button" id="btnLogin"/>
    $("#btnLogin").click(function(){
         //$.ajax......
    });
    请求ASHX文件,我是这样做的:
    当传过来的用户名和密码在数据库中存在时,便使用FormsAuthentication.RedirectFromLoginPage(name, false);方法。
    可是一运行到这个方法就会报错。
    我以为是ASHX的问题,就换成了ASPX文件,还是不可以。
    请问,如果我坚持使用FormsAuthentication这个类来实现登录,代码该怎么实现?


    Do My Best
    2009年12月19日 9:07

答案

全部回复

  • 我的ASHX中的代码是这样的:
    using System.Web;
    using System.Web.Security;
    
    namespace Web.Handlers
    {
        /// <summary>
        /// $codebehindclassname$ 的摘要说明
        /// </summary>
        public class UserHandler : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                string action = context.Request.Params["Action"];
    
                switch (action)
                {
                    case "Login":
                        string userName = context.Request.Params["UserName"];
                        string userPwd = context.Request.Params["UserPwd"];
                        //this.Login(userName, userPwd);
                        break;
                    default: break;
                }
    
                context.Response.ContentType = "text/plain";
                context.Response.Charset = "UTF-8";
                context.Response.Write("ok");
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
    
            private void Login(string name, string pwd)
            {
                if (true)//true : 测试用
                {
                    FormsAuthentication.SetAuthCookie(name, true);
                }
            }
        }
    }
    

     

            $(document.body).ready(function() {
    
                $("#btnLogin").click(function() {
                    var userName = $("#txtUserName").val();
                    var userPwd = $("#txtUserPwd").val();
                    var codeInputed = $("#txtCode").val();
                    var codeInCookie = ReadCookie("CheckCode");
                    if (codeInCookie.toUpperCase() == codeInputed.toUpperCase()) {
                        $.ajax({
                            type: "get",
                            url: "Handlers/UserHandler.ashx?Action=Login&UserName=" + userName + "&UserPwd=" + userPwd,
                            dataType: "text",
                            success:
                                function(data, textStatus) {
                                    if (textStatus == "success") {
                                        document.URL = "Users/UserDetail.html";
                                    }
                                },
                            error:
                                function(XMLHttpRequest, textStatus, errorThrown) {
                                    alert("error:" + textStatus);
                                }
                        });
                    }
                    else {
                        alert("验证码输入错误!");
                    }
                });
            });

    Do My Best
    2009年12月19日 11:33
  • 没有错误啊 你是否没有配置web.config ?
    2009年12月19日 11:57
  • 哦。对,是别地方有错误。不过FormsAuthentication.SetAuthCookie(name, true);这个方法好像没有起作用。因为我在另一个页面使用User.Identity.Name不能得到用户名。
    Do My Best
    2009年12月19日 14:31
  • 哦。对,是别地方有错误。不过FormsAuthentication.SetAuthCookie(name, true);这个方法好像没有起作用。因为我在另一个页面使用User.Identity.Name不能得到用户名。
    Do My Best

    你先试试普通方式 能否登陆
    2009年12月20日 9:35
  • 我试了一下,一个使用ASPX文件,放ASP.NET控件,点击后,即可转到相应的页面。
    但我用HTML控件,通过Ajax访问方法,方法中放有FormsAuthentication.RedirectFromLoginPage(name, true);这个方法,就不能转到相应的页面。好像也没有创建那个验证的Tick。
    我觉得是不是以上的方法不能使用Ajax方式来访问啊?就比如说在ASHX文件中就不能使用User.Identity.Name属性。


    Do My Best
    2009年12月21日 7:01
  • 还有就是我想问问,大家在用Ajax做登陆时,都是怎么做的? 还有一个问题:有没有必要用Ajax做登陆?
    Do My Best
    2009年12月21日 7:04
  • 你好,

    用Ajax登录取决于你的需要。如果你登录后马上就转到其它页面,那就没必要了。

    关于Ajax登录微软有比较详细的例子。

    http://www.asp.net/AJAX/Documentation/Live/Tutorials/UsingFormsAuthenticationTutorial.aspx
    Microsoft Online Community Support
    2009年12月21日 7:36
  • 2009年12月21日 7:44