webform的學習(2)


               突然回想一下,兩周之后放假回家,三周之后重返學習,四周之后就要真正的面對社會,就這樣有好多的舍不得在腦海中回旋,但是又是興奮的想快點擁有自己的小生活,似乎太多的人在說程序的道路甚是艱難,我不知道我的選擇是否是對的,但是我只有一件事情我認為我沒有錯,那就是無論什么時間帶着興趣去做自己喜歡做的事情就是對的,我不知道自己學習的怎么樣,還沒有接觸真正的項目,但是我感覺好想知道自己和其他人的差別在哪里?每天可以說是在學習着,但是我感覺每天都在退步着,一步步的在向MVC的方向走去,但是好想知道在.net方向學習好的那些友友做程序的技術,然后向他們看齊,有個方向,今天仍然學習的webform,昨天已經詳細的總結了webform的認識,但是最后沒有保存好就沒有啦,所以今天再重新的補充一些有關webform知識,

        一.WebForm的對象

        1.Request對象以及方法

         Request.UrlReferrer請求的來源,可以根據這個判斷從百度搜的哪個關鍵詞、防下載盜鏈、防圖片盜鏈,可以偽造(比如迅雷)。 (使用全局一般處理程序);
           Request.UserHostAddress獲得訪問者的IP地址;
          Request.MapPath(virtulPath)將虛擬路徑轉換為磁盤上的物理路徑,Request.MapPath("./a/b.aspx")就會得到D:\2014\WebSites\WebSite4\a\b.aspx。

        2.Request對象以及方法(響應緩存的輸出)     

        Response.Buffer、Response.BufferOutput:經過Reflector反編譯,發現兩個屬性是一樣的,Buffer內部就是調用的BufferOutput。這個屬性用來控制是否采用響應緩存,默認是true。
        Response.Flush()將緩沖區中的數據發送給瀏覽器。這在需要將Write出來的內容立即輸出到瀏覽器的場合非常適用。案例:大批量數據的導入,顯示正在導入第*條數據,用Thread.Sleep模擬耗時。
        Response.Clear()清空緩存區中的數據,這樣在緩存區中的沒有發送到瀏覽器端的數據被清空,不會被發送到瀏覽器。
        Response.ContentEncoding輸出流的編碼。
        Response.ContentType 輸出流的內容類型,比如是html(text/html)還是普通文本(text/plain)還是JPEG圖片(image/JPEG)。
        Response.OutputStream 輸出流,在輸出圖片、Excel文件等非文本內容的時候要使用它
        Response.End()  終止響應,將之前緩存中的數據發給瀏覽器,End()之后的代碼不會被繼續繼承執行,End方法里調用了Flush()方法。 在終止一些非法請求的時候,比如盜鏈等可以用End()立即終止請求。

        3.Server對象以及方法

        

              
         Server是上下文對象context的一個屬性,是HttpServerUtility類的一個對象;
         Server.HtmlDecode()、Server.HtmlEncode() Server.UrlEncode()、 Server.UrlDecode()是對HttpUtility類中相應方法的一個代理調用。推薦總是使用HttpUtility,因為有的地方很難拿到Server對象,而且Server的存在是為以前ASP程序員習慣而留的。別把HtmlEncode、UrlEncode混了,UrlEncode是處理超鏈接中的中文問題, HtmlEncode是處理html代碼的。還是推薦用HttpUtility.HtmlEncode;
         Server.Transfer(path) 內部重定向請求,Server.Transfer(“Default.aspx”)將用戶的請求重定向給Default.aspx處理,是服務器內部的接管(不能重定向到外部網站),瀏覽器是意識不到這個接管的,不是像Response.Redirect那樣經歷“通知瀏覽器‘請重新訪問url這個網址’和瀏覽器接到命令訪問新網址的過程”,是一次http請求,因此瀏覽器地址欄不會變化。因為是內部接管,所以在被重定向到的頁面中是可以訪問到Request、Cookies等這些來源頁面接受的參數的,就像這些參數是傳遞給他的,而Redirect則不行,因為是讓瀏覽器去訪問的。注意Transfer是內部接管,因此不能像Redirect那樣重定向到外部網站。(常考)Response.Redirect就可以重定向到外部網站。 不能內部重定向到ashx,否則會報錯“執行子請求出錯”.
         Server.MapPath把相對路徑轉換為絕對的物理路徑。
         其中的一些方法的實例:
Response.Write("<script>alert('登陸成功')</script>");
Page.RegisterClientScriptBlock(Guid.NewGuid().ToString(), "<script>docment.write('登陸成功')</script>"); //可以使用此方法來彈出提示框,由於Response.Write方法的輸出是在最開始的位置,所以並不好
Page.RegisterStartupScript(Guid.NewGuid().ToString(), "<script>docment.write('登陸成功')</script>");  //也可以使用此方法來彈出提示框,但是這兩種方法現在都已經被否決
Response.Redirect("123.ashx");//這里的方法是臨時重定向,發送的請求代碼是302
Response.RedirectPermanent("123.ashx");//這里的方法是永久重定向,發送的請求代碼是301
string url = Request.UserHostAddress; Response.Clear(); Response.Write(url);  //獲取客戶端地址
string rawurl = Request.RawUrl; Response.Write(rawurl); //獲取請求的相對地址
string useragent = Request.UserAgent; Response.Write(useragent);//獲取瀏覽器版本
string hostaddress = Request.UserHostAddress; Response.Write(hostaddress);//獲取客戶端地址
string hostname = Request.UserHostName; Response.Write(hostname); //獲取客戶端名字

                  二.狀態保持方式

                 1. ViewState ASP.NET 的 .aspx頁面特有,頁面級的; 就是在頁面上的一個隱藏域中保存客戶端單獨使用的數據的一種方式; 服務器端控件的值都自動保存在ViewState中;
         2.Cookie: HTTP協議下的一種方式,通過該方式,服務器或腳本能夠在客戶機上維護狀態信息; 就是在客戶端保存客戶端單獨使用的數據的一種方式; 就像你的病歷本一樣,醫院直接給你帶回家;
         3.Session: 現在指的是進程內Session, 在服務器端保存客戶端單獨使用的數據的一種方式;
         4.Application: 服務器端保存共享數據的一種方式;
                 今天簡單的學習了cookie的使用方法,下面就到簡單的使用在一個小程序中,我就直接使用昨天的登錄界面修改,可以看下的前台類和后台類在不添加cookie時間和現在的區別,下面具來看下登錄界面的程序:
         
public partial class fmLogin : System.Web.UI.Page
{
    UsermessBll bll = new UsermessBll();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["context"] != null)        //判斷是否存在cookie,如果存在,直接跳轉用戶詳情頁,否則重新登錄即可
        {
            Response.Redirect("UserMess.aspx");
        }
        else
        {
            if (Request.HttpMethod == "POST")          //登錄時間判斷是get方式請求還是post方式請求
            {
                string context = this.txtname.Value;
                string pwd = this.txtpwd.Value;
                string checkbox = Request.Form["checkbox"];
                if (bll.GetLogin(context, pwd))            //bll層的返回值是一個bool類型,當不為空時間調用方法
                {
                    if (!string.IsNullOrEmpty(checkbox))          //這里是判斷checkbox中是否被選中,選中時間會存在value值
                    {
                        HttpCookie cookie = new HttpCookie("cookietext", context); //創建cookie,它是鍵值對的形式存在
                        cookie.Expires = DateTime.Now.AddDays(7);          //給他一個時間7天,可以是7小時或者7分鍾
                        Response.Cookies.Add(cookie);                    //添加cookie,記得使用的是Response對象,而不是Request
                        Response.Redirect("UserMess.aspx");
                    }
                }
                else
                {
                    Response.Write("<script>alert('登陸失敗')</script>");
                }
            }
        }
    }
}

         下面就來看下UserMess頁面,獲取cookie:

         

public partial class UserMess : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpCookie cookie = Request.Cookies["cookietext"]; //獲取cookie
        if (cookie != null)        //當存在cookie時間
        {
            this.span.InnerHtml = "<a href=''>" + cookie.Value + "</a>&nbsp&nbsp&nbsp<a href='DelCookie.aspx'>退出</a>";//創建了一個退出的連接
        }
    }
}

                  看下DelCookie頁面,刪除一個cookie:

public partial class DelCookie : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpCookie cookie = Request.Cookies["cookietext"];   //獲取cookie
        if (cookie != null)
        {
            cookie.Expires = DateTime.Now.AddDays(-1);  //這里是讓cookie過期,即不存在cookie,即退出
            //Request.Cookies.Clear();             //這里是使用clear方法清除cookie
            Request.Cookies.Add(cookie);
            Response.RedirectPermanent("fmLogin.aspx");
        }
    }
}

                在這里只是實現了aspx.cs類的程序和aspx類的程序,如果測試的話可以看昨天的bll層的代碼和dal層以及SQLHelper類的程序(http://www.cnblogs.com/dyxd/p/4251686.html),嘿嘿,今天就寫到這里啦,每天告訴自己,要繼續努力,加油!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM