综合应用下载图片(一)

来源:互联网 发布:jquery 二维数组排序 编辑:程序博客网 时间:2024/05/23 07:25

登录页面Login.aspx:

A:前台布局代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="ASP.Net中级.Login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td>
                    <asp:Label ID="UserNameLab" AssociatedControlID="UserName" runat="server" Text="Label">用户名:</asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="PasswordLab" AssociatedControlID="Password" runat="server" Text="Label">密码:</asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="Password" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;
                </td>
                <td>
                    <img id="img1" alt="CheckCode" src="CheckCode.ashx" />
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;
                </td>
                <td>
                    <a href ="#" onclick="img1.src='CheckCode.ashx?aa='+Math.random()">
                        看不清楚,点这里重新获取验证码</a>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="CheckCodeLab" AssociatedControlID="CheckCode" runat="server" Text="Label">验证码:</asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="CheckCode" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;
                </td>
                <td>
                    <asp:Button ID="Button1" runat="server" Text="登录" OnClick="Button1_Click" />
                </td>
            </tr>
             <tr>
                <td>
                    &nbsp;
                </td>
                <td>
                   <asp:Label ID="ErrorMsgLab"  runat="server" BackColor="Red" Visible="False"></asp:Label>
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>
B:后台处理代码

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASP.Net中级.DAL.DownLoadPicTableAdapters;

namespace ASP.Net中级
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            T_UsersTableAdapter adapter = new T_UsersTableAdapter();
            var data = adapter.GetDataByUserName(UserName.Text);
            if (data.Count <= 0)
            {
                ErrorMsgLab.Text = "用户名不存在";
                ErrorMsgLab.Visible = true;
            }
            else
            {
                var user = data.Single();// 返回唯一一条数据,如果数据为0或者多条,则抛出异常,防程序错误于未然。
                if (!user.IsLastErrorTimeNull() && !user.IsErrorTimesNull())
                {
                    double span = (DateTime.Now - user.LastErrorTime).TotalMinutes;//计算当前时间和上次错误时间之间的总分数。
                    if (user.ErrorTimes > 5 && span <= 30)
                    {
                        ErrorMsgLab.Text = "错误次数过多,您的帐号被冻结30分钟";
                        ErrorMsgLab.Visible = true;
                        return;
                    }
                }
                string code = Convert.ToString(Session["code"]);
                if (user.Password == Password.Text)
                {
                    if (code == CheckCode.Text)
                    {
                        Session["是否登录"] = true;
                        Session["登录用户Id"] = user.Id;
                        adapter.ResetErrorTimesById(user .Id);
                        Response.Redirect("DownLoadPic.htm");//将用户重定向到下载页面
                    }
                    else
                    {
                        ErrorMsgLab.Text = "验证码错误";
                        ErrorMsgLab.Visible = true;
                    }
                }
                else
                {
                    adapter.IncErrorTimesById(user.Id);//注意数据库值为空的处理,使用IsNULL()函数。
                    ErrorMsgLab.Text = "密码错误!";//增加防暴力破解,重复错误5次,就锁定账户半个小时(错误次数和上次错误的时间)。
                    ErrorMsgLab.Visible = true;
                }

            }
        }
    }
}