zoukankan      html  css  js  c++  java
  • 第十一节 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>
    

      

  • 相关阅读:
    1208PHP基础
    数据库的查询
    1108 函数
    Shell脚本监控Linux某个后台进程,当进程死掉后重新启动服务,以httpd为例
    Windows下安装Zabbix agent
    Zabbix4.0如何监控Windows主机
    yum下载Zabbix4.0失败的解决方法
    TCP的三次握手与四次挥手理解
    MySQL主从复制原理
    Awk
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2407146.html
Copyright © 2011-2022 走看看