<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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">
用户名:
<asp:TextBox ID="tb_username" runat="server"></asp:TextBox>
<br />
<br />
密 码:
<asp:TextBox ID="tb_password" runat="server" TextMode="Password"></asp:TextBox>
<br />
<br />
<asp:Label ID="error" runat="server" Text="" style="color:red"></asp:Label>
<br />
<br />
<asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="登 陆" />
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
/* 练习: 用户表增加一个级别字段,只有登妹用户才能下载images下的图片文件(session中标识是否登陆)
* 如查用户没有登陆则首先重定向到登录界面让用户登录
* 用户登妹成功则跳转到下载列表页面,下载链接固定写好即可,如果登录用户是普通用户则在图片左上角加上"免费用户试用"的字样
*
*
*/
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string _username = tb_username.Text;
string _password = tb_password.Text;
if (_username != "" && _password != "")
{
//string[] info = this.Db_GetUsersByusername(_username);
//SqlDataReader userinfo = this.Db_GetUsersByusername(_username);
//string myusername = userinfo.GetString(userinfo.GetOrdinal("username"));
//Console.Write(myusername);
/*string myusername = userinfo.GetString(userinfo.GetOrdinal("username"));
string mypasswrd = userinfo.GetString(userinfo.GetOrdinal("password"));
Response.Write("提交成功!");
Console.Write("用户名:"+myusername+", 密码为:"+mypasswrd);*/
DataTable table = this.Db_GetUsersByusername(_username);
if (table.Rows.Count == 1)
{
/*Response.Write("一共有多少行数据: " + table.Rows.Count);
DataRow row = table.Rows[0];
string name = Convert.ToString(row["username"]);
Response.Write("用户名:" + name);*/
//error.Text = "用户名存在";
//error.Visible = false;
//判断密码是否正确
DataRow row = table.Rows[0];
string name = Convert.ToString(row["username"]);
string password = Convert.ToString(row["password"]);
Int64 uid = Convert.ToInt64(row["id"]);
//int errornumber = 0;
//if (row["errornumber"] != DBNull.Value)
//errornumber =
//DateTime errortime = 0;
// Convert.IsDBNull(row["errortime"])
//int? errornumber = ;
//DateTime? errortime = Convert.ToDateTime(row["errortime"]);
//Response.End();
if (Convert.IsDBNull(row["errortime"]) != true && Convert.IsDBNull(row["errornumber"]) != true)
{
int errornumber = Convert.ToInt32(row["errornumber"]);
DateTime errortime = Convert.ToDateTime(row["errortime"]);
//计算当前时间和上次错误时间之间差的分钟数
double span = (DateTime.Now - errortime).TotalMinutes;
if (errornumber > 5 & span <= 30)
{
error.Text = "错误次数过多,30分钟后再重试!";
error.Visible = true;
return;
}
}
if (password == _password)
{
Session["islong"] = true;
Session["uid"] = uid;
Response.Redirect("DownloadList.htm");
}else {
//增加防暴力,重复错误5次,就锁定帐户半个小时(错误次数,上次错误时间)
bool result = this.Db_UpdateErrorById(_username);
if (result == true)
{
error.Text = "操作成功 密码错误!";
}
else {
error.Text = "操作失败 密码错误!";
}
error.Visible = true;
}
}else {
error.Text = "用户名不存在";
error.Visible = true;
}
}
}
public bool Db_UpdateErrorById(string username)
{
DataSet dataset = new DataSet();
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MyProjects\C#net传智播客\第十一节asp.net中级\10图片权限控制\App_Data\Database.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
string daytime = DateTime.Now.ToString();
cmd.CommandText = "update T_Users SET errornumber = errornumber + 1, errortime='" + daytime + "' WHERE username='"+username+"'";
//cmd.Parameters.Add(new SqlParameter("_username", username));
//我日啊,用Sqlparameter今天晚上就是执行不过去
//cmd.Parameters.Add(new SqlParameter("iusername", username));
int val = cmd.ExecuteNonQuery();
if (val == 1)
return true;
else
return false;
}
}
}
//取得用户名是否存在函数, 返回一个数组
//public string[] Db_GetUsersByusername(string username)
public DataTable Db_GetUsersByusername(string username)
{
//string[] info = new string[2]; //定义一个长度为2的字符串数组,来保存用户名和密码
//SqlDataReader reader;
DataSet dataset = new DataSet();
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MyProjects\C#net传智播客\第十一节asp.net中级\10图片权限控制\App_Data\Database.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * FROM T_Users where username=@username";
cmd.Parameters.Add(new SqlParameter("username",username));
//DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
return dataset.Tables[0];
//using (SqlDataReader reader = cmd.ExecuteReader())
//{
//if (reader.Read())
//{
//string _username = reader.GetString(reader.GetOrdinal("username"));
//string _passwrd = reader.GetString(reader.GetOrdinal("password"));
//info[0] = _username;
//info[1] = _passwrd;
//return reader;
//}
//}
}
}
//return dataset;
//return reader;
//return info;
}
}
<%@ WebHandler Language="C#" Class="DownloadPic" %>
using System;
using System.Web;
using System.Web.SessionState;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web.SessionState;
public class DownloadPic : IHttpHandler, IRequiresSessionState {
public void ProcessRequest (HttpContext context) {
//context.Response.ContentType = "text/plain";
//context.Response.Write("Hello World");
//bool islong = bool(context.Session["islong"]);
if (context.Session["islong"] == null)
{
context.Response.Redirect("Default.aspx"); //如果没有登陆,直接跳回页面
}
else {
string picname = context.Request["picname"];
int userId = Convert.ToInt32(context.Session["uid"]);
DataTable table = this.Db_GetUsersByusername(userId);
//context.Response.End();
context.Response.ContentType = "image/JPEG";
string encodeFileName = HttpUtility.UrlEncode(picname);
//context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", encodeFileName));
if (table.Rows.Count == 1)
{
DataRow row = table.Rows[0];
int level = (int)row["level"];
string username = (string)row["username"];
if (level == 1) //正式会员
{
context.Response.WriteFile(picname);
}
else { //普通会员
using (Bitmap bitmap = new Bitmap(context.Server.MapPath(picname)))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.DrawString("免费用户试用-" + username, new Font("宋体", 20), System.Drawing.Brushes.Green, new System.Drawing.PointF(0, 0));
}
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
}
}
//取得用户名是否存在函数, 返回一个数组
public DataTable Db_GetUsersByusername(Int64 userid)
{
DataSet dataset = new DataSet();
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MyProjects\C#net传智播客\第十一节asp.net中级\10图片权限控制\App_Data\Database.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * FROM T_Users where id=@userid";
cmd.Parameters.Add(new SqlParameter("userid", userid));
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
return dataset.Tables[0];
}
}
}
public bool IsReusable {
get {
return false;
}
}
}
<!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></title>
<script type="text/javascript">
var leftSeconds = 4;
setInterval(function(){
if(leftSeconds <= 0)
{
window.location.href="Default.aspx";
}
document.getElementById("leftDiv").innerText = leftSeconds;
leftSeconds --;
},1000);
</script>
</head>
<body>
请先登录,页面将在3秒以后转向登录页面!如果您想立即进入登录页面,请<a href="Default.aspx">点击这里</a><br />
还有<div id="leftDiv"></div>秒
</body>
</html>
<!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></title>
</head>
<body>
<a href="DownloadPic.ashx?picname=1.jpg">1</a><br />
<a href="DownloadPic.ashx?picname=2.jpg">2</a><br />
<a href="DownloadPic.ashx?picname=3.jpg">3</a><br />
</body>
</html>