gsk's place

my love

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

ashx

一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名。一个httpHandler接受并处理一个http请求,类比于Java中的servlet。类比于在Java中需要继承HttpServlet类。在net中需要实现IHttpHandler接口,这个接口有一个IsReusable成员,一个待实现的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中处理接受到的Http请求。成员IsReusable指定此IhttpHandler的实例是否可以被用来处理多个请求。

.ashx程序适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。


例子:

1 前台Html:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>ABC</title>
    <link rel="stylesheet" type="text/css" href="../easyui/themes/default/easyui.css" />
    <link rel="stylesheet" type="text/css" href="../easyui/themes/icon.css" />
    <script type="text/javascript" src="../easyui/jquery.min.js"></script>
    <script type="text/javascript" src="../easyui/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="../easyui/locale/easyui-lang-zh_CN.js"></script>
    <script type="text/javascript" src="index.js"></script>

    <style type="text/css">
         .code
         {
             background-image:url(/Images/verifyCode.png);
             font-family:Arial;
             font-style:italic;
             color:Red;
             border:0;
             padding:2px 3px;
             letter-spacing:3px;
             font-weight:bolder;
             text-align:center;
             -moz-user-select: none; 
             -webkit-user-select: none;  
             -ms-user-select: none;  
             -khtml-user-select: none; 
             user-select: none;
         }
    </style>
</head>
<body>
    <div style="margin:0 auto;position:absolute;top:50%;margin-top:-115px;left:50%;margin-left:-200px">
        <form id="fm" method="post" novalidate>     
            <div id="login" class="easyui-panel" title="登录" style="width:400px;padding:30px 70px 20px 70px;">
                <div style="margin-bottom:10px">
                    <input id="userName1" name="userName" class="easyui-textbox" style="width:100%;height:40px;padding:12px" data-options="prompt:'用户名',iconCls:'icon-man',iconWidth:38">
                </div>
                <div style="margin-bottom:20px">
                    <input id="password1" name="password" class="easyui-textbox" type="password" style="width:100%;height:40px;padding:12px" data-options="prompt:'Password',iconCls:'icon-lock',iconWidth:38">
                </div>
                <div style="margin-bottom:20px; display:inline">
                    <input id="verifyCode" name="verifyCode" type="text" style="width:150px; height:12px; padding:12px; border: 1px solid #95BBE7 " />
                    <input id="checkCode" name="checkCode" value="XH59" class="code" type="text" onclick="createCode()" style="width:60px" readonly />
                </div>
                <div style="margin-top:20px; margin-bottom:20px">
                    <input id="remember1" name="remember" type="checkbox">
                    <span>记住密码</span>
                </div>
                <div>
                    <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" onclick="Login()" style="padding:5px 0px;width:100%;">
                        <span style="font-size:14px;">登录</span>
                    </a>
                </div>
            </div>
        </form>
    </div>    
</body>

 

2 JQuery实现前台html中的Login():

function Login() {
    $('#fm').form('submit', {
        url: "../HttpHandler/LoginHandler.ashx?action=Login",
        onSubmit: function () {
            if (validate()) {
                return $(this).form('validate');
            }
            else {
                return false;
            }
            //return $(this).form('validate');
        },
        error: function () {
            $.messager.alert('错误', '操作失败!', 'error');
        },
        success: function (result) {
            var result = eval('(' + result + ')');
            if (result.success) {
                location.href = "../Pages/MainPage.htm";
            } else {
                $.messager.alert('提示', result.msg, 'warning');
            }
        }
    });
}

 

3 后台一般程序处理:LoginHandler.ashx:

namespace Web.HttpHandler
{
    public class LoginHandler : IHttpHandler, IRequiresSessionState 
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string sReturnJson = string.Empty;
            string action = ParamsofEasyUI.RequstString("action");
            switch (action)
            {
                case "Login":
                    sReturnJson = Login();
                    break;
                case "CheckLogin":
                    sReturnJson = CheckLogin();
                    break;
                case "GetUserInfo":
                    sReturnJson = GetUserInfo();
                    break;
                default:
                    break;
            }
            context.Response.Write(sReturnJson);
            context.Response.End();
        }

        private string GetUserInfo()
        {
            string result = string.Empty;
            //读取保存的Cookie信息
            HttpCookie cookies = HttpContext.Current.Request.Cookies["USER_COOKIE"];
            if (cookies != null)
            {
                result += "{UserName:'";
                result += cookies["UserName"];
                result += "',UserPassword:'";
                result += cookies["UserPassword"];
                result += "',Checked:true}";
            }
            else
            {
                result += "{UserName:'";
                result += "',UserPassword:'";
                result += "',Checked:false}";
            }
            return result;
        }

        private string CheckLogin()
        {
            if (HttpContext.Current.Session.Keys.Count == 0)
            {
                return "{success:false}";
            }

            string curUser = HttpContext.Current.Session["userName"].ToString();

            if (curUser == null)
            {
                return "{success:false}";
            }

            if (HttpContext.Current.Application.AllKeys.Contains(curUser))
            {
                return "{success:true}";
            }
            else
            {
                return "{success:false}";
            }
        }

        private string Login()
        {            
            string userName = ParamsofEasyUI.RequstForm("userName");
            string password = ParamsofEasyUI.RequstForm("password");
            bool blChecked = ParamsofEasyUI.RequstBool("remember");

            string localPsw = Encoding.Default.GetString(Convert.FromBase64String(ConfigTools.Get(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory.ToString(), ConfigurationManager.AppSettings["ConfigFile"]), "CODE")));
            if (userName.ToLower() == "admin" && password == localPsw)
            {                
                if (blChecked)
                {
                    HttpCookie cookie = new HttpCookie("USER_COOKIE");
                    //所有的验证信息检测之后,如果用户选择的记住密码,则将用户名和密码写入Cookie里面保存起来。
                    cookie.Values.Add("UserName", userName);
                    cookie.Values.Add("UserPassword", password);
                    //这里是设置Cookie的过期时间,这里设置一个星期的时间,过了一个星期之后状态保持自动清空。
                    cookie.Expires = System.DateTime.Now.AddDays(7.0);
                    HttpContext.Current.Response.Cookies.Add(cookie);
                }
                else
                {
                    HttpCookie cookie = HttpContext.Current.Request.Cookies["USER_COOKIE"];
                    if (cookie != null)
                    {
                        //如果用户没有选择记住密码,那么立即将Cookie里面的信息清空,并且设置状态保持立即过期。
                        HttpContext.Current.Response.Cookies["USER_COOKIE"].Expires = DateTime.Now;
                    }
                }

                string newGuid = Guid.NewGuid().ToString();
                HttpContext.Current.Application.Lock();
                HttpContext.Current.Application["admin"] = newGuid;
                HttpContext.Current.Application.UnLock();
                HttpContext.Current.Session[HttpContext.Current.Session.SessionID] = newGuid;
                HttpContext.Current.Session.Add("UserName", userName);
                return "{success:true}";
            }
            else
            {
                return "{success:false,msg:'用户名或密码错误!'}";
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

 

namespace Web.HttpHandler
{
    public class ParamsofEasyUI
    {
        public static string RequstForm(string name)
        {
            return (HttpContext.Current.Request.Form[name] == null ? string.Empty : HttpContext.Current.Request.Form[name].ToString().Trim());
        }

        public static string RequstString(string sParam)
        {
            return (HttpContext.Current.Request[sParam] == null ? string.Empty : HttpContext.Current.Request[sParam].ToString().Trim());
        }
    }
}

 

 

 

 

 

posted on 2017-01-12 14:57  gsk99  阅读(3775)  评论(0编辑  收藏  举报