標籤:
突然回想一下,兩周之後放假回家,三周之後重返學習,四周之後就要真正的面對社會,就這樣有好多的捨不得在腦海中迴旋,但是又是興奮的想快點擁有自己的小生活,似乎太多的人在說程式的道路甚是艱難,我不知道我的選擇是否是對的,但是我只有一件事情我認為我沒有錯,那就是無論什麼時間帶著興趣去做自己喜歡做的事情就是對的,我不知道自己學習的怎麼樣,還沒有接觸真正的項目,但是我感覺好想知道自己和其他人的差別在哪裡?每天可以說是在學習著,但是我感覺每天都在退步著,一步步的在向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");//這裡的方法是臨時重新導向,發送的請求代碼是302Response.RedirectPermanent("123.ashx");//這裡的方法是永久重新導向,發送的請求代碼是301string 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>   <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),嘿嘿,今天就寫到這裡啦,每天告訴自己,要繼續努力,加油!!!
webform的學習(2)