XX管理系统案例
一.登录界面
建立登录文件夹Login,在此目录下面建立如下文件:
Index.htm:登录页面
ValidateCode.cs:生成验证码
ProcessVerification.ashx:处理验证码
CommonHelper.cs:帮助处理类
Login.ashx:处理登录
Index.htm:登录页面
<!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>
<title>XX后台管理系统登录</title>
<link href="../css/StyleHouTai.css" rel="stylesheet" />
<script type="text/javascript">
if (window.parent.window != window) {
window.top.location.href = "/Home/CheckLogin";
}
</script>
<script src="../script/jquery-1.8.3.js" type="text/javascript"></script>
<script src="../script/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
<script type="text/javascript">
function changeCheckCode() {
$("#img").attr("src",$("#img").attr("src")+1);
}
function afterLogin(data) {
var serverData = data.split(':');
if (serverData[0] == "ok") {
window.location.href = "/Home/Index";
} else if (serverData[0] == "no") {
$("#errorMsg").text(serverData[1]);
changeCheckCode();
} else {
$("#errorMsg").text("系统繁忙");
}
} function blurCode(id,idErr,errCode) {
$(id).blur(function () {
var loginCode = $(id).val();
//因js不支持trim()函数,需要使用此函数时添加以下语句
//String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); }
//if (loginCode.trim().length <= 0) {
if ($.trim(loginCode).length <= 0) {
$(idErr).text(errCode);
return;
}
else {
$(idErr).text("");
}
});
} $(function () {
blurCode('#LoginCode', '#LoginCodeErr', '请输入账号');
blurCode('#LoginPwd', '#LoginPwdErr', '请输入密码');
blurCode('#code', '#codeErr', '请输入验证码');
}); // $('#btnLogin').click(function () {
// var loginCode = $("#LoginCode").val();
// var loginPwd = $("#LoginPwd").val();
// if (loginCode.length <= 0) {
// alert("请输入账号");
// } // $("#errorMsg").text("登录失败");
// changeCheckCode();
// }); /*
$(function () {
$('#LoginCode').blur(function () {
var loginCode = $("#LoginCode").val();
if (loginCode.trim().length <= 0) {
$("#LoginCodeErr").text("请输入账号");
}
else {
$("#LoginCodeErr").text("");
}
});
$('#LoginPwd').blur(function () {
var loginPwd = $("#LoginPwd").val();
if (loginPwd.trim().length <= 0) {
$("#LoginPwdErr").text("请输入密码");
}
else {
$("#LoginPwdErr").text("");
}
});
$('#code').blur(function () {
var code = $("#code").val();
if (code.trim().length <= 0) {
$("#codeErr").text("请输入验证码");
}
else {
$("#codeErr").text("");
}
});
});*/ </script> </head>
<body style="padding: 10px"> <div id="login">
<div id="loginlogo">
</div>
<div id="loginpanel">
<div class="panel-h">
</div>
<div class="panel-c">
<div class="panel-c-l">
<form action="Login.ashx" method="post"> <table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td align="left" colspan="2">
<h3>请使用XX系统账号登录</h3>
</td>
</tr>
<tr>
<td align="right">账号:</td>
<td align="left">
<input type="text" style="width:150px" name="LoginCode" id="LoginCode" class="login-text" />
<span id="LoginCodeErr" style="color:Red"></span>
</td>
</tr>
<tr>
<td align="right">
密码:
</td>
<td align="left">
<input type="password" style="width:150px" name="LoginPwd" id="LoginPwd" value="" class="login-text" />
<span id="LoginPwdErr" style="color:Red"></span>
</td>
</tr>
<tr>
<td>
验证码:
</td>
<td align="left">
<input type="text" style="width:150px" class="login-text" id="code" name="vCode" value="" />
<span id="codeErr" style="color:Red"></span>
</td>
</tr>
<tr>
<td>
</td>
<td>
<img id="img" src="ProcessVerification.ashx?id=1" style="float: left; height: 24px;" /> <div style="float: left; margin-left: 5px; margin-top: 10px;">
<a href="javascript:void(0)" onclick="changeCheckCode();return false;">看不清,换一张</a>
</div>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" name="btnLogin" id="btnLogin" value="登录" class="login-btn" />
<span id="errorMsg"></span>
</td>
</tr>
</tbody>
</table>
</form> </div>
<div class="panel-c-r">
<p>
请从左侧输入登录账号和密码登录</p>
<p>
如果遇到系统问题,请联系网络管理员。</p>
<p>
如果没有账号,请联系网站管理员。
</p>
<p>
......</p>
</div>
</div>
<div class="panel-f">
</div>
</div>
<div id="logincopyright">
Copyright 2015 www.syfpc.com
</div>
</div>
</body>
</html>
ValidateCode.cs:生成验证码
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web; namespace modelInput
{
public class ValidateCode
{
public ValidateCode()
{
}
/// <summary>
/// 验证码的最大长度
/// </summary>
public int MaxLength
{
get { return ; }
}
/// <summary>
/// 验证码的最小长度
/// </summary>
public int MinLength
{
get { return ; }
}
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="length">指定验证码的长度</param>
/// <returns></returns>
public string CreateValidateCode(int length)
{
int[] randMembers = new int[length];
int[] validateNums = new int[length];
string validateNumberStr = "";
//生成起始序列值
int seekSeek = unchecked((int)DateTime.Now.Ticks);
Random seekRand = new Random(seekSeek);
int beginSeek = (int)seekRand.Next(, Int32.MaxValue - length * );
int[] seeks = new int[length];
for (int i = ; i < length; i++)
{
beginSeek += ;
seeks[i] = beginSeek;
}
//生成随机数字
for (int i = ; i < length; i++)
{
Random rand = new Random(seeks[i]);
int pownum = * (int)Math.Pow(, length);
randMembers[i] = rand.Next(pownum, Int32.MaxValue);
}
//抽取随机数字
for (int i = ; i < length; i++)
{
string numStr = randMembers[i].ToString();
int numLength = numStr.Length;
Random rand = new Random();
int numPosition = rand.Next(, numLength - );
validateNums[i] = Int32.Parse(numStr.Substring(numPosition, ));
}
//生成验证码
for (int i = ; i < length; i++)
{
validateNumberStr += validateNums[i].ToString();
}
return validateNumberStr;
}
/// <summary>
/// 创建验证码的图片
/// </summary>
/// <param name="context">要输出到的page对象</param>
/// <param name="validateNum">验证码</param>
public void CreateValidateGraphic(string validateCode, HttpContext context)
{
Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), );
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for (int i = ; i < ; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height),
Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(validateCode, font, brush, , );
//画图片的前景干扰点
for (int i = ; i < ; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
//保存图片数据
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
//输出图片流
context.Response.Clear();
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(stream.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
/// <summary>
/// 得到验证码图片的长度
/// </summary>
/// <param name="validateNumLength">验证码的长度</param>
/// <returns></returns>
public static int GetImageWidth(int validateNumLength)
{
return (int)(validateNumLength * 12.0);
}
/// <summary>
/// 得到验证码的高度
/// </summary>
/// <returns></returns>
public static double GetImageHeight()
{
return 22.5;
} //C# MVC 升级版
/// <summary>
/// 创建验证码的图片
/// </summary>
/// <param name="containsPage">要输出到的page对象</param>
/// <param name="validateNum">验证码</param>
public byte[] CreateValidateGraphic(string validateCode)
{
Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), );
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for (int i = ; i < ; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height),
Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(validateCode, font, brush, , );
//画图片的前景干扰点
for (int i = ; i < ; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
//保存图片数据
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
//输出图片流
return stream.ToArray();
}
finally
{
g.Dispose();
image.Dispose();
}
}
}
}
ProcessVerification.ashx:处理验证码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using modelInput;
using System.Drawing;
using System.Drawing.Imaging; namespace XX管理系统.Login
{
/// <summary>
/// ProcessVerification 的摘要说明
/// </summary>
public class ProcessVerification : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
ValidateCode validateCode = new ValidateCode();
string code = validateCode.CreateValidateCode();
//创建cookie对象
HttpCookie cookie = new HttpCookie("vCode");
//将cookie值等于自动生成的验证码
cookie.Value = code;
//更新cookie值
context.Response.SetCookie(cookie);
using (Bitmap bmp = new Bitmap(, ))//创建一个尺寸为500*500的内存图片
using (Graphics g = Graphics.FromImage(bmp))//得到图片的画布
{
g.DrawString(code, new Font(FontFamily.GenericSerif, ), Brushes.Red, , );//Font应该被释放
bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);//图片保存到输出流
}
} public bool IsReusable
{
get
{
return false;
}
}
}
}
CommonHelper.cs:帮助处理类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO; namespace XX管理系统
{
public class CommonHelper
{
/// <summary>
/// 返回HTML文件内容
/// </summary>
/// <param name="fileName">HTML文件</param>
/// <returns></returns>
public static string ReadHtml(string fileName)
{
HttpContext context = HttpContext.Current;
string fullpath = context.Server.MapPath(fileName);
string html = File.ReadAllText(fullpath);
return html;
}
}
}
Login.ashx:处理登录
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
//LoginCode,LoginPwd,
string loginCode = context.Request["LoginCode"];//用户名
string loginPwd = context.Request["LoginPwd"];//密码
string vCode = context.Request["vCode"];//验证码
//获取客户端的cookie值
HttpCookie cookie = context.Request.Cookies["vCode"];
if (cookie == null)
{
context.Response.Write("找不到系统生成的验证码");
context.Response.Redirect("Index.htm");
return;
}
if (vCode != cookie.Value)
{
context.Response.Write("验证码错误");
context.Response.Redirect("Index.htm");
return;
}
int r = (int)SQLHelper.ExecuteScalar("select count(*) from Users where name=@loginCode and password=@loginPwd",
new SqlParameter { ParameterName = "@loginCode", Value = loginCode },
new SqlParameter { ParameterName = "@loginPwd",Value=loginPwd });
if (r == )
{
context.Response.Redirect("../Home.htm");
} }
XX管理系统案例的更多相关文章
- Android(java)学习笔记195:学生信息管理系统案例(SQLite + ListView)
1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...
- Android(java)学习笔记188:学生信息管理系统案例(SQLite + ListView)
1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...
- C07 模块化开发信息管理系统案例
目录 需求分析 问题分析 开发阶段 需求分析 总体需求 学员信息管理系统支持以下功能 增加学员信息功能 删除学员信息功能 查询学员信息功能 修改学员信息功能 输出所有学员信息功能 退出系统 其他需求 ...
- Py学生信息管理系统 案例(优化版)
# 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...
- shell脚本自动化部署XX的案例(附数组使用)
#!/bin/sh #Auto Make install MFS Files # cat <<EOF ++++++++++++++++Welcome To Use Auto Install ...
- 【JavaWeb】权限管理系统
前言 前面我们做的小项目都是一个表的,业务代码也相对简单.现在我们来做一个权限管理系统,体验一下多表的业务逻辑,顺便巩固一下过滤器的知识.! 目的 现在我有一个管理商品.订单的页面.当用户点击某个超链 ...
- [转载]基于UML的需求分析和系统设计(完整案例和UML图形演示)
小序: 从学生时代就接触到UML,几年的工作中也没少使用,各种图形的概念.图形的元素和属性,以及图形的画法都不能说不熟悉.但是怎样在实际中有效地使用UML使之发挥应有的作用,怎样捕捉用户心中的需求并转 ...
- Java 简化版学生管理系统(IO版)
Student management system 学生管理系统IO版 详细知识点可参考一下几篇文章 常用API Java 之ArrayList集合及应用 Java 之IO流及应用 Compreh ...
- 08_java超市管理系统
超市管理系统功能介绍 * A:超市管理系统功能介绍 * a: 显示主菜单 ============欢迎光临ItCast超市============ 1: 货物 清单 2: 添加货物 3: 删除货物 4 ...
随机推荐
- 网页设计师常用的PHOTOSHOP插件
Photoshop是网页设计师常用的一个非常重要而强大的工具,可以让网页设计师的工作高效便捷的进行,也为设计师们的天马行空提供了实际技术实现.一般我们的网页设计师设计完成后,需要将其转换制作成网页形式 ...
- HackerRank Extra long factorials
传送门 今天在HackerRank上翻到一道高精度题,于是乎就写了个高精度的模板,说是模板其实就只有乘法而已. Extra long factorials Authored by vatsalchan ...
- ci 4.2
超级对象 $this 当前的控制器对象 有很多属性 $this->load 装载器类的实例在systme/core/loader.php 里面有view方法 $obj = new CI_ ...
- 简单了解Hibernate核心API
一.SessionFactory 1.它代表的是数据库的连接,其实就是在hibernate.cfg.xml文件中的配置信息 2.可以预定义SQL语句 3.SessionFactory是线程安全的,它维 ...
- 动态下载 Yahoo 网络数据存入 Microsoft SQL Server 再 Matlab 调用的一个完整例子
% 编程环境: Matlab 2014a, win7 32bit, Microsoft SQL Server 2008r2 %% % 清屏 clc; clear all; close all; %% ...
- 笔记:PHP查询mysql数据后中文字符乱码
新建表Clubs CREATE TABLE `Clubs` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) CHARACTER SET utf8 NOT NULL ...
- mysql随机获取一条或者多条数据
原文地址:http://www.im286.com/thread-7091552-1-1.html 转来备份 研究一些随机的因素,主要是讲究效率问题. 语句一: MYSQL手册里面针对RAND()的提 ...
- IIS6.0文件解析漏洞小结
今天搞站,本来这个站是aspx的,webserver是IIS6.0的,进入后台之后,发现有一个上传图片的地方,于是,我就上传了一张asp/aspx的一句话图片木马,但是用菜刀连接的时候,没有成功get ...
- Database Password Hashes
SQL Server 2000:- SELECT password from master.dbo.sysxlogins where name=’sa’ 0×010034767D5C0CFA5FDCA ...
- ucenter实现原理
其实Ucenter实现同步登陆的原理就是cookie,一个应用登陆成功之后,向Ucenter传递数据(post方式),让Ucenter通知其他的应用也设置 cookie(get方式),这样用户在访问其 ...