第十一节 10图片权限控制 简单

<%@ 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" onclick="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>

  

原文地址:https://www.cnblogs.com/xiangxiaodong/p/2407146.html