第14章 網站的個人化資訊 14-1 ASP.NET的個人化程序 14-2 使用Cookies建立個人化

Slides:



Advertisements
Similar presentations
第 8 章 ADO.NET 的網頁資料庫操 作 8-1 網頁資料庫的基礎 8-1 網頁資料庫的基礎 8-2 建立資料庫與新增 ODBC 8-2 建立資料庫與新增 ODBC 8-3 ADO.NET 的基礎 8-3 ADO.NET 的基礎 8-4 SQL 指令的資料庫操作 8-4 SQL 指令的資料庫操作.
Advertisements

第一單元 建立java 程式.
第13章 FTP檔案上傳、 自動傳送 報告人 M9153314 李育旻.
Ch03 VB.NET語法建立ASP.NET 網頁程式設計.
《ASP.NET数据库网站设计教程(C#版)》
BLANK overview.
國立高雄海洋科技大學 電子郵件收信軟體設定說明
通訊 授課:方順展.
Ch11 檔案上傳及電子郵件 WEB程式設計.
ASP.NET 網頁製作教本 – 從基本語法學起
JAVA vs. SQL Server 建國科技大學 資管系 饒瑞佶 2013/4 V1.
連結資料庫 ACCESS MSSQL.
Q101 在701 SDX Linux上的標準安裝與使用程序v2
第二章 Linux基本指令與工具操作 LINUX 按圖施工手冊.
第14章 建立網路應用程式 14-1 瀏覽器的建立 14-2 檔案下載器 14-3 寄送電子郵件 14-4 檢查POP 3的電子郵件.
客戶端的檔案上傳 HtmlInputFile檔案控制項 上傳單一檔案 同時上傳多個檔案.
第9章 ADO.NET的網頁資料庫查詢 9-1 從資料表取得單一欄位值 9-2 DataReader物件以表格顯示資料表
ASP.NET 網頁製作教本 – 從基本語法學起
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
第13章 會員管理與個人化程序 13-1 會員管理的基礎 13-2 啟用ASP.NET的會員管理 13-3 登入控制項
第13章 網站的使用者與會員管理 13-1 網站的使用者與會員管理 13-2 ASP.NET的表單基礎驗證
第14章 伺服器檔案、電子郵件處理與Ajax 14-1 資料夾與檔案操作 14-2 文字檔案的讀寫 14-3 電子郵件與附檔處理
第11章 ASP.NET的Web應用程式 11-1 ASP.NET應用程式的基礎 11-2 Global.asax檔的使用
網頁切換移轉 JS vs. ASP.NET.
連結資料庫管理系統.
Ch10 網頁間的資料分享: Application Session 與Cookies的處理
商用軟體 OFFICE 2003.
App Inventor2呼叫PHP存取MySQL
主 讲 教 师:陆有军 Web技术与应用 第四章 内部对象 主 讲 教 师:陆有军
EndNote Web 2.0 ISI Web of Knowledge 金珊資訊有限公司
Java 程式設計 講師:FrankLin.
FTP檔案上傳下載 實務與運用.
第3章 ASP.NET程序设计基础 3.
網頁切換移轉 JS vs. ASP.NET.
VS.NET 2003 IDE.
FileUpload控制項 建國科技大學 資管系 饒瑞佶 2007年.
第10章 Web應用程式的資料分享 10-1 Web應用程式的基礎 10-2 設定ASP.NET的Web應用程式 10-3 網頁間的資料分享
第4章 ASP.NET的HTTP物件、輸出入與Cookie處理
Ch20. 計算器 (Mac 版本).
Pocket Access.
VB2005 DataBase Manipulation Command for Access
第 19 章 XML記憶體執行模式.
Ch04 VB.NET的流程控制 網頁程式設計.
伸峰科技股份有限公司 李書帆 SanfongWeb 網頁編修 伸峰科技股份有限公司 李書帆
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
資料來源 2 網路過濾軟體之安裝說明 資料來源 2.
表格(HTML – FORM).
打地鼠(陣列版).
1 Session对象的特性 Session 状态对象 Session 对象常用的方法有: Session 对象常用的属性有:
Google協作平台+檔案分享(FileZilla+網路芳鄰)
期末考.
Controls.
個人網路空間 資訊教育.
GridView.
GridView操作 (II).
MicroSim pspice.
取得與安裝TIDE 從TIBBO網站取得TIDE
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
基本指令.
Dreamweaver 進階網頁製作 B 許天彰.
Brief Guide of FrontPage
班級:博碩子一甲 授課老師:鐘國家 助教:陳國政
電子郵件簡報.
連結資料庫 MYSQL.
多站台網路預約系統之 AJAX即時資料更新機制
若要查看更多祕訣、影片、說明和訓練,請瀏覽 aka.ms/officetips
第五章 自訂佈景主題與文字處理 講授者:詹雅愔.
SQLite資料庫 靜宜大學資管系 楊子青.
Presentation transcript:

第14章 網站的個人化資訊 14-1 ASP.NET的個人化程序 14-2 使用Cookies建立個人化 14-3 Profile的個人化資訊 14-4 ASP.NET的電子郵件處理 14-5 客戶端的檔案上傳 14-6 ASP.NET網頁行事曆

14-1 ASP.NET的個人化程序-說明 對於網站內容的龐大資訊來說,我們除了替網站資訊進行分類管理外,網站應該提供個人化功能,可以讓會員存取有興趣資訊,並且設定喜好外觀來建立個人風格的資訊平台。 個人化的最終目的是提供個人化網路經驗,網站能夠提供使用者網路使用經驗,例如:在Amazon買書時,網站能夠提供喜好圖書的建議清單,這是從會員網路消費經驗中,所分析出的網路經驗。

14-1 ASP.NET的個人化程序-功能 識別使用者的身份:網站需要能夠識別出是匿名使用者或網站會員,並且提供機制可以監控會員在瀏覽網站過程中的需求,以便馬上提供回應。當然網站必須擁有會員管理功能,可以新增和管理使用者。 儲存使用者相關資訊:網站除了儲存使用者資料外,還需要儲存網路使用經驗的喜好和記錄資料,例如:色彩、外觀、有興趣主題、瀏覽或購買的商品清單等。 提供個人化經驗:個人化經驗除了依照使用者身份來提供不同存取權限外,還包含自訂畫面、追蹤使用瀏覽經驗和消費資訊等。

14-2 使用Cookies建立個人化-說明 每位進入網頁的使用者對於網頁色彩都有個人偏好,活用Cookies就可以讓使用者設定喜歡的網頁色彩,提供網頁個人化色彩的選擇。 在本節的程式範例和第4章Response物件建立Cookie的方法不同,筆者是使用HttpCookie類別。

14-2 使用Cookies建立個人化-建立HttpCookie物件 在Page_Load()事件處理程序建立HttpCookie物件的Cookie,如下所示: Dim Cookie As HttpCookie=New HttpCookie("personal") 程式碼建立名為personal的HttpCookie物件(即Name屬性值),然後使用Values屬性取得Key鍵名的集合物件,如下所示: Cookie.Values.Add("TitleBgColor","Maroon") Cookie.Values.Add("TitleForeColor","white") Cookie.Values.Add("ForeColor","green") ………

14-2 使用Cookies建立個人化-HttpCookie類別的屬性 HttpCookie類別的相關屬性,如下表所示:

14-3 Profile的個人化資訊 14-3-1 定義Profile物件的屬性 14-3-2 Profile物件的簡單屬性 14-3-4 匿名個人化

14-3-1 定義Profile物件的屬性- 說明 Profile物件是ASP.NET 2.0版的新功能,可以取代Session物件來追蹤使用者狀態。 Profile物件的屬性是在Web組態檔web.config定義,它是Web應用程式希望儲存的使用者專屬資料。在ASP.NET系統提供相關機制,預設是SQL Server Express資料庫,可以自動在跨網頁瀏覽時,讓ASP.NET程式存取Profile物件儲存的資料。

14-3-1 定義Profile物件的屬性- 定義Profile物件的屬性1 Profile物件屬性是在Web組態檔web.config的<profile>標籤定義,位在<profile>標籤的enabled屬性為true,表示啟用Profile。 在<properties>標籤使用<add>子標籤來新增Profile物件的屬性,以此例是名為Name的屬性,其相關屬性說明,如下表所示:

14-3-1 定義Profile物件的屬性- 定義Profile物件的屬性2 <profile enabled="true"> <properties> <add name="Name" defaultValue="Huey-An Chen" type="String"/> <group name="Student"> <add name="StudentId" type="Int32"/> <add name="Name" type="String"/> <add name="Score" type="Int32"/> </group> ……… </properties> </profile>

14-3-1 定義Profile物件的屬性- Profile物件與Membership機制 Profile物件與Membership機制擁有密切關係,因為Profile物件儲存的資料,預設是針對指定會員儲存的資料,如此,當會員登入網站後,系統才能依據登入會員從資料庫取出對應的Profile物件。

14-3-1 定義Profile物件的屬性- Profile物件與Session物件的差異 第11章的Session物件也可以儲存會員的使用者資訊,不過,Session物件儲存的資料只在目前Session期間有效,當Session期間結束,下一次進入Web應用程式時,仍然需要重新輸入這些資料,資料並不會自動保留。 Profile物件能夠自動將使用者資料儲存在永久儲存媒體,預設是SQL Server Express資料庫,當下一次進入Web應用程式時,上一次進入建立或修改的Profile資料能夠自動取出,並且自動維護這些資料。

14-3-2 Profile物件的簡單屬性-定義屬性 Profile物件的簡單屬性是指儲存單一資訊的屬性,在web.config檔案定義Name簡單屬性,如下所示: <properties> <add name="Name" defaultValue="Huey-An Chen" type="String"/> ……… </properties>

14-3-2 Profile物件的簡單屬性-存取屬性值 在ASP.NET程式可以存取Profile物件的屬性值,如下所示: msg.Text = Profile.Name Profile.Name = name.Text 上述程式碼分別取出和設定Profile物件的Name屬性,因為Profile物件屬性會持續存在,換句話說,我們可以在跨網頁瀏覽時,讓ASP.NET程式存取Profile物件儲存的資料。

14-3-3 Profile物件的群組屬性-定義屬性 Profile物件的群組屬性儲存的是一組資訊,在web.config檔案已經定義Student群組屬性來儲存學生資訊,如下所示: <properties> <group name="Student"> <add name="StudentId" type="Int32"/> <add name="Name" type="String"/> <add name="Score" type="Int32"/> </group> ……… </properties>

14-3-3 Profile物件的群組屬性-存取屬性值 ASP.NET程式可以存取Profile物件的屬性值,如下所示: no.Text = Profile.Student.StudentId name.Text = Profile.Student.Name score.Text = Profile.Student.Score 上述程式碼取出Profile群組屬性Student的學生資訊StudentId、Name和Score。

14-3-4 匿名個人化-說明 匿名個人化(Anonymous Personalization)是讓沒有登入網站的使用者都能擁有個人化功能,一般來說,我們會使用Cookie儲存匿名使用者的相關資料,來達成匿名個人化的功能。

14-3-4 匿名個人化-啟用 ASP.NET的Profile物件也能夠儲存匿名使用者的相關資料(不需登入網站),它是使用GUID(Globally Unique Identifier)來識別匿名使用者,換句話說,它可以取代Cookie功能。在web.config檔案啟用匿名使用者識別,如下: <anonymousIdentification enabled="true"/> 上述標籤的enabled屬性為true,表示啟用匿名使用者識別。如此,我們就可以定義匿名使用者的Profile屬性,如下所示: <add name="WishList" allowAnonymous="true" type="System.Collections.ArrayList"/>

14-3-4 匿名個人化-實作 匿名個人化在實作上可以建立購物網站的喜愛商品清單,或是購物車功能,使用者在尚未登入網站前,就可以選擇商品清單,等到登入網站後,將匿名選擇的清單整合至會員的Profile物件。 ASP.NET程式是使用Button控制項的AddWishList()和RemoveWishList()事件處理程序來新增和刪除喜愛商品清單的集合物件,如下所示: Profile.WishList.Remove(book.Text) Profile.WishList.Add(book.Text)

14-3-4 匿名個人化-合併匿名使用者的Profile物件(說明) 當匿名使用者登入網站,其選擇的清單就需要合併至會員Profile的屬性,在Global.asax檔案需要新增Profile_MigrateAnonymous()事件處理程序來合併匿名使用者的Profile物件。

14-3-4 匿名個人化-合併匿名使用者的Profile物件(範例) Sub Profile_MigrateAnonymous(ByVal Sender As Object, _ ByVal E As ProfileMigrateEventArgs) Dim anonymousProfile As ProfileCommon = _ Profile.GetProfile(E.AnonymousId) If anonymousProfile IsNot Nothing AND _ anonymousProfile.WishList IsNot Nothing Then Dim enum1 As IEnumerator = _ anonymousProfile.WishList.GetEnumerator() Do While enum1.MoveNext() Profile.WishList.Remove(enum1.Current) Profile.WishList.Add(enum1.Current) Loop End If End Sub

14-4 ASP.NET的電子郵件處理 14-4-1 Web表單的電子郵件寄送 14-4-2 資料庫的大量郵件寄送 14-4-3 取得POP 3未讀取的郵件數

14-4-1 Web表單的電子郵件寄送-匯入名稱空間 在ASP.NET 2.0版寄送電子郵件是使用System.Net.Mail名稱空間(2.0版新增的名稱空間)的MailMessage、MailAddress和SmtpClient類別,在程式開頭匯入此名稱空間,如下所示: <%@ Import Namespace="System.Net.Mail" %> 在匯入名稱空間後,就可以使用MailMessage和MailAddress類別建立電子郵件內容,然後使用SmtpClient類別寄送郵件。

14-4-1 Web表單的電子郵件寄送-建立MailMessage物件 Dim mail As MailMessage = _ New MailMessage() 上述程式碼建立名為mail的MailMessage物件後,就可以設定物件的相關屬性來建立郵件內容。

14-4-1 Web表單的電子郵件寄送-MailMessage物件屬性

14-4-1 Web表單的電子郵件寄送- SmtpClient類別屬性方法 在建立好MailMessage物件後,就可以建立SmtpClient物件來指定SMTP伺服器,其相關屬性如下表所示: 使用Send()方法寄出郵件,如下表所示:

14-4-2 資料庫的大量郵件寄送- ListUsers資料表 對於網站電子郵件廣告或電子報等大量郵件的寄送,可以使用資料庫儲存收件者的電子郵件地址,然後透過ASP.NET郵件功能來寄送大量的電子郵件。 Access資料庫【ListServer.mdb】內含ListUsers資料表,欄位【UserEmail】是電子報訂閱者的電子郵件地址,如下所示:

14-4-2 資料庫的大量郵件寄送- sendEmail()程序 Sub sendEmail(objBcc As MailAddressCollection, _ emailSubject As String, emailBody As String) Dim mail As MailMessage = New MailMessage() mail.To.Add(New MailAddress("hueyan@ms2.hinet.net")) Dim enum1 As IEnumerator = objBcc.GetEnumerator() Do While enum1.MoveNext() mail.Bcc.Add(enum1.Current) Loop mail.From = New MailAddress("hueyan@ms2.hinet.net") mail.Subject = emailSubject mail.Body = emailBody Dim smtpServer As New SmtpClient() smtpServer.Host = "ms2.hinet.net" smtpServer.Send(mail) End Sub

14-4-2 資料庫的大量郵件寄送-建立MailAddressCollection物件 使用ADO.NET的DataReader物件來讀取資料表的記錄資料,其主要目的是將電子郵件地址新增至MailAddressCollection集合物件,如下所示: objDataReader = objCmd.ExecuteReader() Dim objBcc As New MailAddressCollection Do While objDataReader.Read() If objDataReader.IsDBNull(objDataReader. _ GetOrdinal("UserEmail")) = False Then strEmail = objDataReader.Item("UserEmail") msg.Text &= "寄送郵件到: <b>"& _ strEmail &"</b><br>" objBcc.Add(New MailAddress(strEmail)) End If Loop

14-4-3 取得POP 3未讀取的郵件數-說明 在ASP.NET程式建立System.Net.Sockets名稱空間的TcpClient類別後,就可以透過TCP/IP指定埠號來連接常用的Internet服務,例如:FTP是21、WWW是80,SMTP是25和POP 3的110。

14-4-3 取得POP 3未讀取的郵件數-建立TcpClient物件 Dim mailClient As TcpClient = New TcpClient() 關於TcpClient物件建立連線和取得串流的方法,如下表所示:

14-4-3 取得POP 3未讀取的郵件數-建立POP 3郵件伺服器的連線 Try mailClient.Connect(host, 110) Catch e As Exception msg.Text = "連結郵件伺服器錯誤: " & _ e.Message & "<br>" Exit Sub End Try 程式碼建立遠端主機的連線後,使用GetStream()方法取得串流物件,如下所示: ns = mailClient.GetStream()

14-4-3 取得POP 3未讀取的郵件數-計算郵件數 ASP.NET程式是使用sendCommand()方法來送出指令,當送出郵件帳號和密碼成功登入伺服器後,就可以送出stat指令計算郵件數,如下所示: responseMsg = sendCommand( _ ns, "stat" & vbCrLf) Dim msgArray() As String msgArray = responseMsg.Split(" ") Dim numOfMsg As String = msgArray(1)

14-5 客戶端的檔案上傳 14-5-1 HtmlInputFile控制項與檔案上傳 14-5-2 顯示上傳檔案的資訊 14-5-3 同時上傳多個檔案 14-5-4 電子郵件的附檔處理 14-5-5 上傳圖檔到資料庫 14-5-6 顯示資料庫的圖片欄位

14-5-1 HtmlInputFile控制項與檔案上傳-HtmlInputFile控制項 ASP.NET程式可以使用HtmlInputFile控制項在客戶端選擇上傳檔案,其HTML標籤,如下所示: <input type="File" Id="filename" size="30" accept="image/*" Runat="server"/> 上述標籤是Input欄位,只是type屬性為File,可以顯示選取客戶端電腦檔案的欄位,如下圖所示:

14-5-1 HtmlInputFile控制項與檔案上傳-上傳表單 因為擁有HtmlInputFile控制項的Web表單是為了上傳檔案,所以在<form>標籤需要使用enctype屬性指定編碼方式,如下所示: <form enctype="multipart/form-data" Runat="server"> ………….. </form> 上述enctype屬性指定上傳檔案的編碼方式。

14-5-1 HtmlInputFile控制項與檔案上傳-上傳檔案 在HtmlInputFile控制項filename選好上傳檔案後,上傳檔案資料會隨著網頁送回伺服端,在伺服端使用PostedFile屬性取得HttpPostedFile物件,如下所示: Dim file As HttpPostedFile = _ filename.PostedFile 然後使用SaveAs()方法寫成伺服端的檔案來完成檔案上傳,如下所示: file.SaveAs(up_path & "/" & _ Path.GetFileName(file.FileName))

14-5-2 顯示上傳檔案的資訊 HttpPostedFile類別的屬性可以取得上傳檔案資訊,其相關屬性如下表所示:

14-5-3 同時上傳多個檔案-HtmlInputFile控制項 <input type="File" Id="filename" size="30" accept="image/*" Runat="server"/><br> <input type="File" Id="filename1" size="30" <input type="File" Id="filename2" size="30"

14-5-3 同時上傳多個檔案-HtmlInputFile控制項 在選擇多個上傳檔案後,就可以在伺服端取得上傳檔案的集合物件,如下所示: Dim objFileCollection As HttpFileCollection objFileCollection = Request.Files 程式碼使用Request物件的Files屬性取得上傳檔案的HttpFileCollection集合物件。 在取得上傳檔案的集合物件後,就可以使用For/Next迴路取得每一個HttpPostedFIle物件。

14-5-4 電子郵件的附檔處理-上傳附檔 電子郵件如果擁有附檔,檔案需要先上傳到伺服端後,才能新增成為電子郵件的Attachment物件。 當輸入郵件內容且選擇附檔後,ASP.NET程式可以建立MailMessage物件和上傳附檔,如下所示: uploadFile = temp_path & "/" & _ Path.GetFileName(fileName.FileName) fileName.SaveAs(uploadFile)

14-5-4 電子郵件的附檔處理-新增附檔 在上傳郵件附檔後,就可以建立附檔的Attachment物件,如下所示: Dim attachedFile As Attachment = _ New Attachment(uploadFile) attachedFile.Name=Path.GetFileName( _ fileName.FileName) mail.Attachments.Add(attachedFile)

14-5-5 上傳圖檔到資料庫-讀取上傳的圖片檔案資料 HttpPostedFile類別可以將圖檔視為串流檔案來讀取,在讀取圖檔內容後,即可使用參數的SQL指令來插入資料表,如下所示: Dim UpFile As HttpPostedFile = filename.PostedFile Dim imageStream As Stream = UpFile.InputStream 接著就可以讀取圖檔內容,如下所示: Dim fileLength As Integer = UpFile.ContentLength Dim buffer(fileLength) As Byte imageStream.Read(buffer, 0, FileLength) imageStream.Close()

14-5-5 上傳圖檔到資料庫-在資料庫插入擁有圖片檔案的記錄 現在我們已經讀取上傳圖檔內容,接著就可以建立參數SQL字串來插入記錄,在Command物件關於圖檔部分的參數,如下所示: objCmd.Parameters.Add(New OleDbParameter( _ "@image", OleDbType.VarBinary)) "@content", OleDbType.VarChar, 50)) 然後就可以指定參數值,如下所示: objCmd.Parameters("@image").Value = buffer objCmd.Parameters("@content").Value = _ UpFile.ContentType

14-5-6 顯示資料庫的圖片欄位 ASP.NET程式範例Ch14-5-6.aspx使用資料來源控制項取得Products資料表的記錄資料,然後使用GridView控制項以表格方式顯示記錄資料。

14-6 ASP.NET網頁行事曆 14-6-1 Calendar控制項 14-6-2 ASP.NET網頁行事曆

14-6-1 Calendar控制項-標籤 Calendar控制項可以在網頁顯示萬年曆,並且提供屬性來指定月曆顯示方式,或以事件處理執行日期相關操作。其使用方式很簡單,如果沒有設定屬性,就以預設值來顯示萬年曆,如下所示: <asp:Calendar Id="calendar" Runat="server"/>

14-6-1 Calendar控制項-控制項屬性 Calendar控制項是System.Web.UI.WebControls名稱空間的Calendar類別,提供相關屬性來顯示不同的萬年曆外觀,如下所示: <asp:Calendar Id="calendar" Runat="server" OnSelectionChanged="SelectedRange" OnVisibleMonthChanged="MonthChange" Height="200px" Width="500px" TitleStyle-BackColor="Maroon" TitleStyle-ForeColor="White" ……… NextPrevStyle-ForeColor="white" NextPrevStyle-Font-Size="18px" SelectWeekText="選星期" SelectMonthText="選月份"/>

14-6-1 Calendar控制項-控制項事件 Calendar控制項提供3個事件,可以使用OnDayRendar、OnSelectionChanged和OnVisibleMonthChanged屬性指定事件處理程式。事件說明如下表所示:

14-6-2 ASP.NET網頁行事曆-取得事件記錄的二維陣列 在Calendar控制項的日期儲存格可以顯示事件記錄,ASP.NET程式是在Page_Load()事件處理程序,使用二維陣列來儲存事件記錄,如下所示: Dim eventDays(12,31) As String 上述程式碼宣告整年日期的二維陣列,第一維是月份,第二維是日期,如下所示: eventDays(1,10) = "目前進度是14章" eventDays(1,31)= "完成前16章" eventDays(2,28)= "本書交稿日"

14-6-2 ASP.NET網頁行事曆-顯示事件記錄的DayRender事件 Sub EventDayRender(Sender As Object, _ E As DayRenderEventArgs) Dim currDay As CalendarDay = E.Day Dim currCell as TableCell = E.Cell If currDay.IsOtherMonth Then ' 是否是此月份 currCell.Controls.Clear() ' 清除資料 Else ' 建立儲存格內容 Try Dim description As String = eventDays( _ currDay.Date.Month, currDay.Date.Day) If description <> "" Then currCell.Controls.Add(New LiteralControl( _ "<br><font size=2>"& description &"</font>")) End If Catch err As Exception msg.Text = err.ToString() End Try End Sub

14-6-2 ASP.NET網頁行事曆-編輯事件記錄的SelectionChanged事件 當使用者選取指定日期,就會觸發SelectionChanged事件,其事件處理程序為SelectedDate(),如下所示: Sub SelectedDate(Sender As Object, _ E As EventArgs) msg.Text = "選擇的日期: " & _ calendar.SelectedDate.ToShortDateString() End Sub