Tải bản đầy đủ (.pdf) (147 trang)

Giáo trình lập trình Web

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.34 MB, 147 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ĐẠI HỌC CÔNG NGHỆ TP.HCM </b>

<b>LẬP TRÌNH WEB </b>

<b>Biên soạn: Nguyễn Đình Ánh </b>

Nguyễn Huy cường Mai Ngọc Thu

Trần Đăng Khoa

<i>Phạm Hữu Kỳ </i>

Website:

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>LẬP TRÌNH WEB </b>

Ấn bản 2023

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>MỤC LỤC </b>

<b><small>MỤCLỤC ...IHƯỚNGDẪN ... VI</small></b>

<b><small>BÀI 1TỔNG QUAN VỀ ASP.NET ... 8</small></b>

<i><small>Dễ dàng triển khai và cấu hình ... 10</small></i>

<b><small>1.2TÍNHNĂNGMỚITRONGASP.NET4.5 ... 10</small></b>

<i><small>Đọc và ghi bất đồng bộ các đối tượng HTTP Request và Response... 11</small></i>

<i><small>Hỗ trợ cho các các module và handler bất đồng bộ dạng await và task-based (Support for await and Task-Based Asynchronous Modules and Handlers) ... 12</small></i>

<i><small>Các tính năng mới kiểm tra tính hợp lệ đối với Request ... 14</small></i>

<i><small>Thư viện Anti-XSS ... 16</small></i>

<i><small>Hỗ trợ cho giao thức WebSockets ... 17</small></i>

<i><small>Bundling và Minification ... 19</small></i>

<i><small>Cải thiện tốc độ cho Web Hosting ... 19</small></i>

<b><small>1.3TẠOTRANGWEBVỚIVISIUALSTUDIO ... 19</small></b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<i><small>Khác biệt với Web Form ... 61</small></i>

<i><small>Lợi ích của ứng dụng web dựa trên mơ hình MVC ... 62</small></i>

<b><small>5.2XÂYDỰNGỨNGDỤNGVỚIASP.NETMVC ... 64</small></b>

<i><small>Tạo Project với ASP.NET MVC Web Application ... 64</small></i>

<b><small>BÀI 6TỔNG QUAN VỀ ASP.NET CORE ... 71</small></b>

<b><small>6.1TỔNGQUANASP.NETCORE ... 71</small></b>

<i><small>Giới thiệu ASP.NET Core ... 71</small></i>

<i><small>Lý do chọn ASP.NET Core? ... 72</small></i>

<i><small>Sự khác biệt giữa .NET Framework và .NET Core ... 74</small></i>

<i><small>So sánh ASP.NET với ASP.NET Core ... 74</small></i>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<i><small>Đặc tính trong ASP.NET Core ... 77</small></i>

<i><small>Sự khác biệt của ASP.NET Core và ASP.NET ... 78</small></i>

<i><small>Lợi ích của ứng dụng web khi xây dựng bằng ASP.NET Core ... 79</small></i>

<b><small>6.2XÂYDỰNGỨNGDỤNGVỚIASP.NETCORE ... 80</small></b>

<i><small>Tạo Project với ASP.NET Core Empty ... 80</small></i>

<b><small>TÓMTẮT ... 85</small></b>

<b><small>BÀITẬP ... 86</small></b>

<b><small>BÀI 7TỔNG QUAN VỀ ASP.NET CORE MVC ... 87</small></b>

<b><small>7.1TỔNGQUANASP.NETCORE MVC ... 87</small></b>

<i><small>Giới thiệu ASP.NET CORE MVC... 87</small></i>

<i><small>TÌM HIỂU VỀ MODEL ... 88</small></i>

<i><small>TÌM HIỂU VỀ CONTROLLER ... 91</small></i>

<i><small>TÌM HIỂU VỀ VIEW ... 92</small></i>

<b><small>7.2XÂYDỰNGỨNGDỤNGVỚIASP.NETCORE MVC ... 94</small></b>

<i><small>Tạo Project với ASP.NET Core MVC ... 94</small></i>

<b><small>TÓMTẮT ... 97</small></b>

<b><small>BÀITẬP ... 98</small></b>

<b><small>BÀI 8KỸ THUẬT TRUYỀN DỮ LIỆU TRONG ASP.NET CORE MVC ... 100</small></b>

<b><small>8.1VIEWBAG TRONG ASP.NETCORE MVC ... 100</small></b>

<i><small>So sánh ViewData với các phương thức truyền dữ liệu khác ... 104</small></i>

<i><small>Những lưu ý khi sử dụng ‘ViewData’ ... 104</small></i>

<i><small>Kết luận ... 104</small></i>

<b><small>8.3STRONGLY TYPED VIEWS TRONG ASP.NETCORE MVC ... 105</small></b>

<i><small>Định nghĩa Strongly Typed Views ... 105</small></i>

<i><small>Đặc điểm của Strongly Typed Views ... 105</small></i>

<i><small>Cách sử dụng Strongly Typed Views ... 105</small></i>

<i><small>Ví dụ chi tiết ... 106</small></i>

<i><small>Tóm tắt ... 107</small></i>

<b><small>8.4VIEWMODEL TRONG ASP.NETCORE MVC ... 108</small></b>

<i><small>Định nghĩa ViewModel ... 108</small></i>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<i><small>Cách tạo ViewModel ... 108</small></i>

<i><small>Ví dụ chi tiết ... 109</small></i>

<i><small>Tóm tắt ... 109</small></i>

<b><small>8.5TEMPDATA TRONG ASP.NETCORE MVC... 110</small></b>

<i><small>Khái niệm TempData... 110</small></i>

<i><small>Ưu điểm của TempData ... 110</small></i>

<i><small>Cách hoạt động của TempData ... 110</small></i>

<b><small>BÀI 9ĐỊNH TUYẾN TRONG ASP.NET CORE MVC ... 114</small></b>

<b><small>9.1GIỚI THIỆU ĐỊNH TUYẾN TRONG ASP.NETCORE MVC ... 114</small></b>

<i><small>Định tuyến trong ASP.NET Core MVC là gì? ... 114</small></i>

<i><small>Định tuyến hoạt động như thế nào trong ASP.NET Core? ... 115</small></i>

<i><small>Tìm hiểu định tuyến URL trong ASP.NET Core MVC ... 117</small></i>

<b><small>TÓMTẮT ... 119</small></b>

<b><small>BÀITẬP ... 120</small></b>

<b><small>BÀI 10QUẢN LÝ TRẠNG THÁI TRONG ASP.NET CORE MVC ... 121</small></b>

<b><small>10.1COOKIES IN ASP.NETCORE MVC ... 121</small></b>

<b><small>BÀI 11ENTITY FRAMEWORK CORE ... 126</small></b>

<b><small>11.1GIỚI THIỆU VỀ ENTITY FRAMEWORK CORE ... 126</small></b>

<i><small>Entity Framework Core là gì? ... 127</small></i>

<i><small>Khái niệm ORM ... 127</small></i>

<i><small>Tại sao lại sử dụng ORM? ... 127</small></i>

<i><small>Vì sao chọn Entity Framework Core trong các ứng dụng .NET? ... 128</small></i>

<b><small>11.2CÁCPHƯƠNGPHÁPTIẾPCẬNTRONGENTITYFRAMEWORKCORE ... 128</small></b>

<i><small>Code First Approach ... 129</small></i>

<i><small>Database First Approach ... 130</small></i>

<b><small>11.3EFCORE DATABASE PROVIDERS ... 130</small></b>

<b><small>11.4ASP.NETCORE MVCSỬ DỤNG EFCORE ... 130</small></b>

<i><small>Thao tác CRUD trong ASP.NET Core MVC với EF Core ... 131</small></i>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<i><small>Ví Dụ Minh Họa: Xác Thực Người Dùng ... 139</small></i>

<i><small>Phân Quyền và Kiểm Soát Truy Cập ... 140</small></i>

<b><small>12.2ASP.NETCORE IDENTITY ... 141</small></b>

<i><small>Thiết Lập ASP.NET Core Identity ... 141</small></i>

<i><small>Ví Dụ Minh Họa: Đăng Ký và Đăng Nhập Người Dùng ... 142</small></i>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>HƯỚNG DẪN </b>

<i><b>MÔ TẢ MÔN HỌC </b></i>

Môn học trang bị kiến thức nền tảng về cách xây dựng các ứng dụng web đa năng và hiệu suất cao. Mơn học cung cấp một cái nhìn tổng quan về nền tảng ASP.NET, giới thiệu đến học viên các thành phần cốt lõi, cách thức hoạt động của ASP.NET Core, cũng như mơ hình MVC, làm nền tảng cho việc phát triển web. Sinh viên sẽ được hướng dẫn chi tiết qua từng bài học, từ những khái niệm cơ bản đến các kỹ thuật lập trình nâng cao.

Trong q trình học, khơng chỉ dừng lại ở lý thuyết, mơn học cịn chú trọng vào việc thực hành qua việc áp dụng các kiến thức vào dự án thực tế. Học viên sẽ có cơ hội làm việc trực tiếp trên các dự án web, áp dụng kiến thức về Entity Framework Core trong việc tạo và quản lý cơ sở dữ liệu, xây dựng các chức năng định tuyến phức tạp và quản lý trạng thái ứng dụng. Kết thúc mơn học, học viên sẽ có đủ khả năng để tự tin xây dựng và triển khai các ứng dụng web chuyên nghiệp với ASP.NET Core MVC.

<b>NỘI DUNG MÔN HỌC </b>

 Bài 1 TỔNG QUAN VỀ ASP.NET

 Bài 2 CÁC LỚP SỬ DỤNG TRONG ASP.NET

 Bài 3 TRUY CẬP DỮ LIỆU

 Bài 4 LẬP TRÌNH VỚI JQUERY

 Bài 5 TỔNG QUAN VỀ ASP.NET MVC

 Bài 6 TỔNG QUAN VỀ ASP.NET Core

 Bài 7 TỔNG QUAN VỀ ASP.NET CORE MVC

 Bài 8 KỸ THUẬT TRUYỀN DỮ LIỆU TRONG ASP.NET CORE MVC

 Bài 9 ĐỊNH TUYẾN TRONG ASP.NET CORE MVC

 Bài 10 QUẢN LÝ TRẠNG THÁI TRONG ASP.NET CORE MVC

 Bài 11 ENTITY FRAMEWORK CORE

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>YÊU CẦU MÔN HỌC </b>

Người học vận dụng được kiến thức nền tảng về lập trình web để có thể thiết kế cài đặt các ứng dụng web, như quản lý website, hệ quản trị nội dung, ứng dụng thương mại điện tử, các dịch vụ web.

Kỹ năng lập trình, và phân tích thiết kế ứng dụng thành thạo.

Người học cần đi học đầy đủ, đọc các nội dung sẽ được học trước khi đến lớp, làm các bài tập về nhà và đảm bảo thời gian tự học ở nhà.

<b>CÁCH TIẾP NHẬN NỘI DUNG MƠN HỌC </b>

Để học tốt mơn này, người học cần đọc trước các nội dung chưa được học trên lớp; tham gia đều đặn và tích cực trên lớp; hiểu các khái niệm, tính chất và ví dụ tại lớp học. Sau khi học xong, cần ôn lại bài đã học và làm các bài tập, câu trắc nghiệm. Tìm đọc thêm các tài liệu khác liên quan đến bài học và làm thêm bài tập.

<b>PHƯƠNG PHÁP ĐÁNH GIÁ MƠN HỌC </b>

Mơn học được đánh giá gồm hai thành phần.

 Điểm quá trình (50%): Hình thức và cách đánh giá do giảng viên dạy lý thuyết quyết định được phê duyệt của bộ mơn.

 Điểm thi cuối kỳ (50%): Hình thức làm đồ án môn học và chấm thi vấn đáp dựa trên nội dung đồ án môn học kết hợp với lý thuyết trong các bài học. Danh sách đồ án do giảng viên quyết định được bộ môn kiểm duyệt và cung cấp vào đầu khóa học.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>Bài 1 TỔNG QUAN VỀ ASP.NET </b>

Học xong bài này người học sẽ nắm được các nội dung sau:

<i>- Hiểu được tổng quan về công nghệ ASP.NET, Khái niệm về ASP.NET. - Biết được những tính năng mới của ASP.NET 4.5 so với ASP.NET 2.0. - Biết cách tạo website ASP.NET MVC trong Visual Studio. </i>

<b>1.1 TỔNG QUAN ASP.NET Giới thiệu </b>

<b>Trước hết, tên đầy đủ của ASP.NET là Active Server Pages .NET (.NET ở đây là </b>

.NET framework). Nói đơn giản thì ASP.NET là một cơng nghệ có tính cách mạng dùng để phát triển các ứng dụng về mạng hiện nay cũng như trong tương lai. ASP.NET là

<i>một phương pháp tổ chức hay khung tổ chức (framework) để thiết lập các ứng dụng </i>

<i><b>mạnh cho mạng dựa trên CLR (Common Language Runtime). </b></i>

<b> ASP.NET tích hợp với Framework </b>

.NET Framework được chia thành bộ các tác vụ cho từng chức năng gồm các lớp

<i>(class), các cấu trúc (structures), các giao diện (interfaces) và các lõi (core) thành phần </i>

chương trình. Trước khi sử dụng thành phần nào ta phải hiểu cơ bản về chức năng, các tổ chức của nó. Mỗi một trong hàng nghàn các tầng lớp được nhóm theo trình tự logic,

<b>thứ bậc được gọi là một namespace. Mỗi namespace cung cấp một tính năng. </b>

<b> Tính đa ngôn ngữ </b>

Để xây dựng một ứng dụng web chúng ta khơng chỉ chọn một ngơn ngữ mà có thể chọn nhiều ngôn ngữ khác. Điều quan trọng là các ngơn ngữ chúng ta chọn mã của nó

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

biết được IL.

<b> Tính hướng đối tượng </b>

ASP.NET là ngơn ngữ lập trình hướng đối tượng sử dụng các ngơn ngữ .NET. Nó cung cấp bộ các đối tượng nhỏ và thực sự là một tầng làm việt trên nguyên lý của HTTP và HTML. Mã nguồn của chúng ta khơng được truy cập tồn bộ các đối tượng trong .NET Framework nhưng có thể khai thác tất cả các quy ước của một môi trường OOP (Object Oriented Programming). Chúng ta có tạo các lớp, giao diện, kế thừa các lớp ... Chúng ta có thể kiểm sốt được các đối tượng trong chương trình như hiển thị dữ liệu và các sự kiện của đối tượng.

<b> Biên dịch ASP.NET </b>

Một ứng dụng ASP.NET ln ln được biên dịch, nó khơng chạy bằng mã của C# hoặc Visual Basic mà không được biên dịch trước. Một ứng dụng ASP.NET thực sự được biên dịch thông qua 2 giai đoạn:

- Giai đoạn đầu tiên những các

<i>mã (code) ta viết (C#, Visual </i>

Basic hoặc ngôn ngữ .NET khác) được dịch bởi

<b>Microsoft Intermediate </b>

<i><b>Language (MSIL). Giai đoạn </b></i>

dịch này được dịch tự động khi trang wed đầu tiên yêu cầu. Chúng ta có thể thực hiện dịch trước. Các tập tin được dịch thành mã IL

<i>(Intermediate Language Code). </i>

- Giai đoạn tiếp theo được dịch trước khi trang Web được thực thi. Tại giai đoạn này

<i>mã IL được dịch thành bản mã máy (Native Machine Code). Giai đoạn này được gọi </i>

<i><b>là Just-In-Time (JIT). </b></i>

<b>Hình 1.1: Kiến trúc .Net Framework </b>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Khía cạnh quan trọng nhất của cơng cụ ASP.NET là nó chạy trong môi trường thời

<i><b>gian thực (Runtime) của CLR (Common Language Runtime). CLR là máy ảo (virtual </b></i>

<i>machine) trong Microsoft .NET, do có ngơn ngữ trung gian IL nên khi phát triển ứng </i>

dụng trên .NET, chúng ta không bị phụ thuộc vào thiết bị, có nghĩa là theo Microsoft nói thì ứng dụng .NET có thể chạy trên bất kỳ thiết bị nào có .NET Framework. Tất cả các namespace, các ứng dụng, các lớp trong bộ .NET Framework được gọi tắt là bộ quản lý mã. CLR cũng cung cấp các dịch vụ quan trọng khác như:

- Quản lý bộ nhớ - Thu nhặt rác - Quản lý các tuyến - Xử lý ngoại lệ - An toàn

<b> Dễ dàng triển khai và cấu hình </b>

Mọi sự cài đặt .NET Framework đều cung cấp các lớp như nhau. Để triển khai ứng dụng ASP.NET chúng ta chỉ cần sao chép các tập tin vào thư mục ảo trên máy chủ (server) và máy chỉ chỉ cần có .NET Framework.

<i><b>Việc cấu hình dễ dàng đơn giản không phụ thuộc vào IIS (Internet Information </b></i>

<i><b>Services). Cấu hình trong ASP.NET được đặt trong tập tin web.config. Tập tin </b></i>

web.config được để cùng với thư mực chứa trang web của chúng ta. Tập tin web.config khơng bao giờ bị khóa, chúng ta có thể truy cập bất kỳ lúc nào, việc sửa tập tin này hồn tồn dễ dạng vì chúng được lưu dưới dạng XML.

<b>1.2 TÍNH NĂNG MỚI TRONG ASP.NET 4.5 </b>

Microsoft phát hành ASP.NET vào ngày 19 tháng 11 năm 2007 cùng với Visual Stutio 2008. Đây là bước tiến hóa từ ASP.NET 2.0 tới ASP.NET 4.5. Nếu chúng ta đang sử dụng ASP.NET 2.0 để sử dụng ASP.NET 4.5 chỉ cần cài đặt thêm các tính năng mới của ASP.NET 4.5. Trong phần này ta sẽ giới thiệu một số tính năng mới trong ASP.NET 4.5

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b> Đọc và ghi bất đồng bộ các đối tượng HTTP Request và Response </b>

ASP.NET 4 giới thiếu khả năng đọc một thực thể HTTP request như là một stream bằng cách sử dụng phương thức HttpRequest.GetBufferlessInputStream. Phương thức này cung cấp khả năng truy xuất stream cho thực thể request, nhưng nó được thực thi đồng bộ, và như vậy nó sẽ làm nghẽn thread vì phải thực thi việc đọc stream.

ASP.NET 4.5 hỗ trợ khả năng đọc stream bất đồng bộ trên thực thể HTTP request, và khả năng flush bất đồng bộ. ASP.NET 4.5 cũng giúp cho bạn có khả năng tăng gấp đơi buffer cho một thực thể HTTP request, điều đó giúp cho việc tích hợp dễ dàng với các các downstream HTTP handlers như là các trang .aspx và các ASP.NET MVC controllers.

<b>1.2.1.1 Các cải tiến cho việc quản lý HttpRequest </b>

Stream được tham chiếu bởi HttpRequest.GetBufferlessInputStream trong ASP.NET 4.5 hỗ trợ các phương thức đọc đồng bộ và bất đồng bộ. Đối tượng Stream được trả về từ phương thức GetBufferlessInputStream nay đã cài đặt cho cả hai phương thức BeginRead và EndRead. Các phương thức bất đồng bộ của Stream giúp bạn đọc bất đồng bộ thực thể Request theo từng chunks (từng phần nhỏ), trong khi đó ASP.NET sẽ giải phóng thread hiện tại đối với mỗi vòng lặp của việc đọc bất đồng bộ.

ASP.NET cũng thêm vào một phương thực mới cho việc đọc thực thể request theo cách đọc sử dụng bộ đệm là HttpRequest.GetBufferedInputStream. Phương thức nạp chồng mới này cũng giống với phương thức GetBufferlessInputStream, hỗ trợ các phương thức đọc đồng bộ lẫn bất đồng bộ. Tuy nhiên, khi GetBufferedInputStream đọc, nó sao chép tuyên các bytes của thực thể request vào trong bộ đệm nội vi của ASP.NET do đó các downstream modules và các handlers vẫn có thể truy xuất vào đối tượng request. Ví dụ, nếu một số mã upstream đang nằm trong đường ống (pipeline) đã đọc thực thể request sử dụng phương thức GetBufferedInputStream, bạn vẫn có thể sử dụng HttpRequest.Form hoặc HttpRequest.Files. Điều này giúp cho bạn có thể xử lý bất động bộ đến request (ví dụ như vừa streaming một tập tin kích thước lớn đến CSDL), nhưng mà vẫn tiếp tục chạy được các trang .aspx và controllers.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>1.2.1.2 Ghi dữ liệu bất đồng bộ lên đối tượng response </b>

Gởi các response đến trình HTTP khách có thể làm tốn kém thời gian khi client ở quá xa hoặc có kết nối băng thơng hẹp. Bình thường thì ASP.NET sẽ truyền các bytes trả về sau đó gọi lệnh gởi bộ đệm nói trên vào thời điểm kết thúc xử lý request.

Nếu nội dung trả về (được buffer) là lớn (ví dụ như gởi về một tập tin lớn cho client), bạn phải lặp lại việc gọi HttpResponse.Fush để gởi về client và giữ mức sử dụng bộ nhớ nằm trong tầm kiểm soát. Tuy nhiên, Flush là một lời gọi đồng bộ, nên việc gọi đi gọi lại Flush sẽ tiêu tốn nhiều thời gian.

ASP.NET 4.5 đã có thêm sự hỗ trợ cho việc ghi dữ liệu bất đồng bộ bằng các phương thức BeginFlush và EndFlush của đối tượng HttpResponse. Sử dụng các phương thức này sẽ giúp bạn tạo được các module bất đồng bộ và các hanlder bất động bộ mà chúng sẽ gởi dữ liệu liên tục về client mà không làm chậm các thread của hệ điều hành. Giữa các lời gọi BeginFlush và EndFlush, ASP.NET giải phóng thread hiện tại. Khi sđó nó sẽ giảm bớt lượng các thread cần phải chờ hỗ trợ các lượt tải về tốn nhiều thời gian.

<b> Hỗ trợ cho các các module và handler bất đồng bộ dạng await và task-based (Support for await and Task-Based Asynchronous Modules and Handlers) </b>

Nền tảng .NET 4 đã giới thiệu đến khái niệm lập trình bất đồng bộ gọi là task. Các task được đại diễn bởi kiểu dữ liệu Task và các kiểu liên quan có trong namespace System.Threading.Tasks. Nền tảng .NET 4.5 tiếp tục cải tiến và giúp cho việc làm việc với các đối tượng Task trở nên đơn giản hơn. Với .NET 4.5, trình biên dịch hỗ trợ hai từ khóa mới đó là await và async. Từ khóa await giúp xác định một đoạn mã lệnh phải chờ đợi bất đồng bộ đến khi một đoạn code khác thực thi xong. Cịn từ khóa async thì lại là chỉ dẫn rằng bạn có thể sử dụng các phương thức có từ khóa đó như là các phương thức bất đồng bộ dạng task-based.

Sự kết hợp giữa hai từ khóa await, async và đối tượng Task giúp cho bạn có thể dễ dàng viết mã bất đồng bộ trong .NET 4.5. ASP.NET 4.5 hỗ trợ bằng các APIs giúp cho bạn có thể viết các HTTP modules và các HTTP handlers bất đồng bộ sử dụng các cải tiến của trình biên dịch.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>1.2.2.1 Các module HTTP bất đồng bộ </b>

Giả sử bạn muốn thực hiện công việc bất đồng bộ với một phương thức trả về đối tượng Task. Mã ví dụ sau đây định một phương thức bất đồng bộ mà nó thực hiện một lời gọi bất đồng bộ để tải về trang nhà của Microsoft.

Đó là tất cả những gì bạn cần viết và nền tảng .NET sẽ tự động quản lý call stack trong khi chờ đợi việc download thực hiện xong, cũng như phục hồi call stack khi việc download hoàn thành.

Bây giờ giả như bạn muốn sử dụng phương thức bất đồng bộ trong một ASP.NET HTTP module. ASP.NET 4.5 có một phương thức trợ giúp

(EventHandlerTaskAsyncHelper) và một kiểu dữ liệu delegate mới (TaskEventHandler) mà nhớ đó bạn có thể dễ dàng tích hợp các phương thức bất đồng bộ dạng task-based với mơ thức lập trình bất động bộ được thực thi bởi ASP.NET pipeline. Ví dụ dưới đây cho thấy cách thực hiện:

<b>1.2.2.2 Các Http handler bất đồng bộ </b>

Cách tiếp cận truyền thống để viết các handler bất đồng bộ trong ASP.NET chính là cài đặt interface IHttpAsyncHandler. ASP.NET 4.5 giới thiệu kiểu bất đồng bộ

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

HttpTaskAsyncHandler mà bạn có thể kế thừa, và sẽ giúp việc xây dựng các handler bất đồng bộ dễ dàng hơn.

Kiểu HttpTaskAsyncHandler là trừu tượng và yêu cầu bạn phải quá tải phương thức ProcessRequestAsync. ASP.NET sẽ chịu trách nhiệm về việc tích hợp dấu hiệu dạng Task-based được ProcessRequestAsync với mơ hình lập trình bất đồng bộ cũ được sử dụng bởi ASP.NET pipeline.

Ví dụ dưới đây chỉ dẫn cho bạn cách sử dụng Task và từ khóa await như là một phần của việc cài đặt một HTTP handler bất đồng bộ

<b> Các tính năng mới kiểm tra tính hợp lệ đối với Request </b>

ASP.NET mặc định thực hiện việc kiểm tra tính hợp lệ đối với request, nó sẽ kiểm tra các request để tìm các thẻ hoặc script trong các trường, header, cookies… Nếu như nó phát hiện được điều gì bất hợp lệ, ASP.NET sẽ ném ngoại lệ. Hành vi này là tuyến phòng ngừa đầu tiên ddooois với lối tấn công cross-site scripting attack.

ASP.NET 4.5 giúp cho việc đọc các dữ liệu chưa được kiểm tra dễ dàng hơn. ASP.NET 4.5 cũng mặc định tích hợp thư viện AntiXSS.

Các lập trình viên thường yêu cầu cho phép được tuyef chọn tắt việc kiểm tra hợp lệ đối với request trong các ứng dụng của họ. Ví dụ như, nếu ứng dụng của bạn là một diễn đàn, bạn sẽ muốn cho phép người dùng gởi lên các bài viết theo định dạng

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

nơi cịn lại.

ASP.NET 4.5 giới thiệu hai tính năng cho phép bạn dễ dàng làm việc với các dữ liệu nhập không được kiểm tra: làm chậm việc kiểm tra tính hợp lệ của request và truy xuất vào dữ liệu chưa được kiểm tra của request.

<b>1.2.3.1 Làm chậm (“lazy”) việc kiểm tra tính hợp lệ của request </b>

Trong ASP.NET 4.5, tất cả các dữ liệu request đều phải được kiểm tra tính hợp lệ. Tuy nhiên bạn có thể cấu hình ứng dụng cho phép hỗn kiểm tra tính hợp lệ cho đến khi bạn truy xuất xong dữ liệu của request. Bạn có thể cấu hình ứng dụng để sử dụng kiểm tra hợp lệ chậm (deferred validation) trong Web.config bằng cách gán giá trị cho thuộc tính requestValidationMode trong thẻ httpRuntime là 4.5 như dưới đây:

<i><httpRuntime requestValidationMode = "4.5"... /> </i>

Khi requestValidationMode được quy định là 4.5, việc kiểm tra tính hợp lệ cho request chỉ thực hiện cho từng giá trị cụ thể khi và chỉ khi mã lệnh của bạn truy xuất giá trị đó. Ví dụ như khi bạn lấy giá trị Request.Form["forum_post"], chỉ có phần tử đó được kiểm tra tính hợp lệ mà thơi. Các phần tử khác trong tập hợp Form sẽ không được kiểm tra. Trong phiên bản trước của ASP.NET, kiểm tra hợp lệ cho request sẽ được thực hiện đối với cả tập hợp Form khi có bất kỳ phần tử nào của tập hợp Form được truy xuất. Tính năng mới này giúp cho các thành phần của ứng dụng chỉ khi truy xuất phần tử nó cần sẽ khơng kích hoạt việc kiểm tra tính hợp lệ dữ liệu của các phần tử khác.

<b>1.2.3.2 Hỗ trợ có các request chưa được kiểm tra tính hợp lệ </b>

Kiểm tra hợp lệ dữ liệu cho request “trễ” thực ra chưa giải quyết được nhu cầu cần bỏ qua việc kiểm tra hợp lệ dữ liệu cho một phần tử nào đó của request. Lời gọi

Request.Form[“forum_post”] vẫn kích hoạt việc kiểm tra hợp lệ cho giá trị của phần tử đó. Tuy nhiên, thực ra bạn vẫn cần đọc được phần tử này mà khơng kích hoạt việc kiểm tra tính hợp lệ, bởi vì bạn muốn chấp nhận mã đánh dấu được lưu trong trường đó.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Để chấp nhận việc bỏ qua kiểm tra tính hợp lệ, ASP.NET 4.5 bây giờ đã hỗ trợ cho việc bỏ qua kiểm tra hợp lệ bằng cách cung cấp một thuộc tập hợp có tên là

Unvalidated trong lớp HttpRequest. Chúng ta có thể sử dụng tập hợp này để truy xuất đến tất cả các giá trị thông dụ như Form, QueryString, Cookies, và Url.

Sử dụng cùng với ví dụ trên, để có thể đọc dữ liệu chưa được kiểm tra hợp lệ, bạn cần phải cấu hình ứng dụng để sử dụng cơ chế kiểm tra tính hợp lệ của request mới:

<b> Thư viện Anti-XSS </b>

Bởi vì thư viện Microsoft AntiXSS được sử dụng rất phổ biến, ASP.NET 4.5 đã tích hợp tính năng chính của thư viện này (phiên bản 4.0) vào chính nó.

Các kỹ thuật mã hóa được cài đặt bởi kiểu AntiXssEncoder trong namespace mới là System.Web.Security.AntiXss. Bạn có thể dụng kiểu AntiXssEncoder trực tiếp bằng cách gọi bất ký phương thức mã hóa tĩnh nào được cài đặt trong kiểu này. Tuy nhiên, phương thực tiếp cận dễ nhất đó là cấu hình ứng dụng ASP.NET để ứng dụng mặc định sử dụng AntiXssEncoder. Để làm được điều đó, bạn cần thêm thuộc tính sau vào tập tin Web.config:

<httpRuntime ... encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

Dưới đây là các thành phần của thư viện AntiXSS được tích hợp vào ASP.NET 4.5:

 HtmlEncode, HtmlFormUrlEncode, and HtmlAttributeEncode

 XmlAttributeEncode and XmlEncode

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

 CssEncode

<b> Hỗ trợ cho giao thức WebSockets </b>

Giao thức WebSockets là một giao thức mạng chuẩn nhằm định nghĩa cách thiết lập các kết nối hai chiều thời gian thực giữa client và server thông qua giao thức HTTP. Microsoft đã làm việc với các chuẩn IETF và W3C để giúp định nghĩa giao thức này. Giao thức WebSocket được hỗ trợ bởi bất kỳ client nào (không chỉ là browsers).

Giao thức WebSockets giúp cho việc gởi nhận dữ liệu trong thời gian dài giữa client và server dễ dàng hơn. Ví dụ, việc xây dựng một ứng dụng chat sẽ dễ dàng hơn nhiều bởi vì bạn có thể thiếp lập một kết nối “thời gian dài” giữa client và server mà không phải mất cơng giả lập các tính năng của một socker như trước đây nữa.

ASP.NET 4.5 và IIS 8 bây giờ đã hỗ trợ WebSockets, cho phép các lập trình viên có thể sử dụng APIs để đọc và ghi bất đồng bộ chuỗi và dữ liệu nhị phân trên một đối tượng WebSockets. ASP.NET 4.5 đã có một namespace mới là

System.Web.WebSockets chứa các kiểu dành cho việc lập trình với giao thức WebSockets.

Trình duyệt sẽ thiết lập một kết nối WebSockets để tạo một đối tượng DOM là WebSocket mà đối tượng này trỏ đến một URL của ứng dụng ASP.NET, như dưới đây:

socket = new WebSocket("ws://contoso.com/MyWebSocketApplication.ashx"); Bạn có thể tạo các endpoint trong ASP.NET bầng bất cứ module hoặc handler nào. Với ví dụ trên thì chúng ta sử dụng tập tin .ashx, bởi vì tập tin .ashx là cách để có thể thiết lập một hanlder nhanh chóng.

Để áp dụng giao thức WebSockets, ứng dụng ASP.NET chấp nhận một request dạng WebSockets bằng cách xác định rằng request đó nên được nâng cấp từ một request dạng HTTP GET thành request dạng WebSockets. Xem ví dụ dưới:

<i>HttpContext.Current.AcceptWebSocketRequest(// WebSocket delegate ở đây) </i>

Phương thức AcceptWebSocketRequest chấp nhật tham số là một delegate bởi vì ASP.NET sẽ bung HTTP request và chuyển quyền điều khiển đến delegate đó. Cách

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

tiếp cận này khá giống với cách bạn dùng System.Threading.Thread, ở đó bạn sẽ định nghĩa một thread-start delegate mà mọi công việc sẽ được thực hiện bên trong

delegate đó.

Sau khi ASP.NET và client đã hoàn thành xong việc thiết lập kết nối thông qua giao thức WebSockets, ASP.NET gọi delegate của bạn và ứng dụng WebSockets sẽ bắt đầu chạy. Mã lệnh dưới đây mih hoạt mã của một ứng dụng sử dụng tính năng hỗ trợ WebSockets của ASP.NET

Từ khóa await và các thao tác dạng task-based hoàn toàn phù hợp để xây dựng các ứng dụng WebSockets. Mã lệnh dưới đây cho thấy một request dạng WebSockets chạy hoàn toàn bất đồng bộ bên trong Asp.NET. Ứng dụng này chờ đợi thông điệp một cách bất đồng bộ từ client bằng cách gọi phương thức socket.ReceiveAsync. Tương tự, bạn có thể gởi thơng điệp bất đồng bộ đến client bằng cách gọi await socket.SendAsync.

Ở trình duyệt, ứng dụng khách nhận được các thông điệp WebSockets ở hàm

onmesssage. Để gởi một thơng điệp từ trình duyệt, bạn có thể gọi phương thưng thức send của đối tượng DOM WebSocktet như dưới đây:

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<i>// Receive a string message from the server. socket.onmessage = function(msg) </i>

<i> { </i>

<i> document.getElementById("serverData").innerHTML = msg.data; }; </i>

<i> // Send a string message from the browser. </i>

<i> socket.send(document.getElementById("msgText")); </i>

<b> Bundling và Minification </b>

Bundling (gói, bó lại) cho phép bạn gộp nhiều tập tin JavaScript và CSS thành một gói và có thể xem như là một tập tin duy nhất. Minification là việc làm giảm kích thước các tập tin JavaScript và CSS bằng cách xóa các ký tự trắng thừa và các ký tự khơng cần thiết. Các tính năng này hoạt động với các ứng dụng Web Forms, ASP.NET MVC, và Web Pages.

<b> Cải thiện tốc độ cho Web Hosting </b>

.NET Framework 4.5 và Windows 8 giới thiệu các tính năng cho phép bạn tăng tốc rõ rệt đối với website. Trong đó thời gian khởi động và dung lượng bộ nhớ sử dụng của các web hosting sử dụng ASP.NET được giảm đến 35%.

<b>1.3 TẠO TRANG WEB VỚI VISIUAL STUDIO Tạo dự án mới </b>

- Chúng ta kích hoạt ứng dụng Visual Studio (h1.2).

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>Hình 1.2: Tạo mới dự án </b>

<b>- Nếu chọn New Project xuất hiện hộp hội thoại New Project (h1.3) </b>

- Trong Project Type:

 Visual Basic → Web nếu chọn Visual Basic là ngôn ngữ viết ứng dụng.

 Visual C# → Web nếu chọn C# là ngôn ngữ viết ứng dụng. - Trong Templates chọn ASP.NET Web Application,.

- Trong Name đặt tên cho Project, tên do ta đặt. - Trong Location là thư mục chứa Project.

 Nếu chọn New Web Site xuất hiện hộp hội thoại New Project sau. - Trong Languge:

 Visual Basic → Web nếu chọn Visual Basic là ngôn ngữ viết ứng dụng.

 Visual C# → Web nếu chọn C# là ngôn ngữ viết ứng dụng.

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

- Trong Location chọn tên và thư mực chứa Project.

<b>Hình 1.3: Chọn ứng dụng ASP.NET Web Application </b>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<b> Ví dụ </b>

<b>Hình 1.4: Tạo dự án dạng ASP.NET Web Application </b>

<b>Ví dụ ta tạo một dự án có tên là BigSchool, đặt tại ổ đĩa C, chọn ngôn ngữ chọn là C# (h1.5) sau đó bấm OK. Tiếp theo, chọn ứng dụng Web MVC </b>

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>Hình 1.5: BigSchool project </b>

Tiếp theo nhấn vào Change Authentication:

<b>Individual User Accounts: Dự án được tạo ra là loại dự án Web bao gồm cả phần </b>

security

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<b>No Authentication: Dự án được tạo ra là dự án Web không bao gồm phần security Windows Authentication: Dự án được tạo ra là loại dự án Web bao gồm cả phần </b>

security nhưng tài khoản được quản lý trên mạng nội bộ.

<b>Work or School Accounts: Dự án được tạo ra là loại dự án Web sử dụng tài khoản </b>

<i>Kiến trúc MVC là việc chia tất cả mục của một ứng dụng ra làm ba thành phần (component) khác nhau Model, View và Controller: </i>

<i><b>- Model: Model được giao nhiệm vụ cung cấp dữ liệu cho cơ sở dữ liệu và lưu dữ liệu </b></i>

<i>vào các kho chứa dữ liệu. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông qua View được kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu. Việc truy xuất, xác nhận, và lưu dữ liệu là một phần của Model. </i>

<i><b>- View: View hiển thị các thông tin cho người dùng của ứng dụng và được giao nhiệm </b></i>

<i>vụ cho việc nhận các dữ liệu vào từ người dùng, gửi đi các yêu cầu đến bộ điều khiển, sau đó là nhận lại các phản hồi từ bộ điều khiển và hiển kết quả cho người dùng. Các trang HTML, JSP, các thư viện thể và các tập tin nguồn là một phần của thành phần View. </i>

<i><b>- Controller: Controller là tầng trung gian giữa Model và View. Controller được giao </b></i>

<i>nhiệm vụ nhận các yêu cầu từ phía máy khách. Một yêu cầu được nhận từ máy khách được thực hiện bởi một chức năng logic thích hợp từ thành phần Model và sau đó sinh ra các kết quả cho người dùng và được thành phần View hiển thị. ActionServlet, Action, ActionForm và struts-config.xml là các phần của Controller. </i>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<b>BÀI TẬP </b>

<b>Câu 1: Thao tác </b>

- Làm quen với môi trường Microsoft Visual Studio - Xây dựng ứng dụng web đơn giản WebCalculator

 Tạo Project WebApplication

 Thiết kế giao diện

 Viết mã lệnh xử lý đơn giản

 Chạy, Debug và sửa lỗi chương trình

<b>Câu 2: Mơi trường Microsoft Visual Studio 2010 hoặc mới hơn </b>

- Một số khái niệm cơ sở

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

 Properties

 Solution Explorer

 Class View

 Xem màn hình design form: Shift-F7

 Chuyển đổi từ Design sang Code và ngược lại: F7

 Chạy chương trình: Ctrl-F5 (hoặc F5 với chế độ Debug)

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

<b>Bài 2 CÁC LỚP SỬ DỤNG TRONG ASP.NET </b>

Học xong bài này người học sẽ nắm được các nội dung sau.

<i>- Hiểu được các khái niệm về đối tượng Http Request, Http Response, Http Server, </i>

<i>Session, Cookie. </i>

<i>- Biết vận dụng thành thạo những đối tượng này trong bài lập trình liên quan. </i>

<b>2.1 HTTP REQUEST Giới thiệu </b>

<b>Request là một thể hiện của lớp HttpRequest. Trình duyệt dùng đối tượng Request để gửi thơng tin cần thiết tới Server. </b>

<b>Hình 2.1: Người dùng gởi yêu cầu đến server </b>

<b>Đối tượng Request nhận tất cả giá trị mà trình duyệt của client gởi đến server thông qua HTTP Request. </b>

Request đại diện cho Client khi yêu cầu trang Web, Server sẽ dùng vừa Response vừa Request để đáp ứng yêu cầu hay địi hỏi thơng tin từ Client.

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

<b> Các thuộc tính 2.1.2.1 RequestType </b>

<b>RequestType: trả về phương thức truyền dữ liệu từ client đến server gồm 2 phương </b>

<b>thức POST và GET </b>

<i>Cú pháp: var valMethode=Request.RequestType; </i>

<b>2.1.2.2 Tập hợp Form - Form collection </b>

Form collection được sử dụng để tập hợp dữ liệu được chứa trong các phần tử của

<b>form chuyển từ client đến server bằng phương thức POST. </b>

<b>2.2 HTTP RESPONSE </b>

<b> true: Hồn tất cơng việc và gửi một lần </b>

<b> false: Thực hiện xong đến đâu thì gửi đến đó </b>

<b>- isClientConnected: Kiểm tra máy client có yêu cầu kết nối đến server, kết quả trả </b>

về giá trị true/false

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

<i><b>Httpcookies </b></i>

<b>- Clear(): Xóa vùng tạm </b>

<i><b>Cú pháp: Response.Clear() </b></i>

<b>- End(): Kết thúc tiến trình xử lý trên Server và đẩy dữ liệu tới Client </b>

<i><b>- Flush(): Kết thúc tiến trình, quay lại thực hiện tiếp </b></i>

<b>- Redirect(url) : dùng để chuyển client sang một URL khác </b>

<b>- Redirect(url, Boolean): dùng để chuyển client sang một URL khác, trong đó: </b>

<b> Nếu Boolean=true thì khi thực hiện xong, lệnh Response sẽ thực hiện tiếp </b>

<i><b> Nếu Boolean =false thì khi thực hiện xong, lệnh Response sẽ dừng - Write(“Data”): Ghi dữ liệu ra trang web </b></i>

<b>Ví dụ: Response.Write(“Hello world”); </b>

<b>2.3 HTTP SERVER </b>

<b>- Đối tượng Server cung cấp các phương thức giúp chuyển điều khiển giữa các trang </b>

với nhau, lấy thông tin về mã lỗi, encode, … - Các thuộc tính:

<b> MachineName: tên server </b>

<b> ScriptTimeout: thiết lập thời gian xử lý tối đa 1 tập tin </b>

Ví dụ: Server.ScriptTimeout=100s //thiết lập thgian mặc định

<b>- HtmlEncode(str): dùng để mã hoá HTML thành chuỗi </b>

<i>Cú pháp: Khi mã hố chuỗi HTML sang chuỗi bình thường nếu gặp các ký tự như sau </i>

sẽ chuyển sang ký tự tương ứng:

<b> Ký tự < chuyển thành &lt; </b>

<b> Ký tự > chuyển thành &gt; </b>

<b> Ký tự & chuyển thành &amp; </b>

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<b> Dấu nháy đôi “ chuyển thành &quot; </b>

<b>- HtmlDecode(strcontent):giải mã các thẻ HTML </b>

Ví dụ: Str=“n&gt;5”; Str=server.HtmlDecode(str); // kết quả n>5

<b>- Transfer: gửi tất cả thơng tin mà nó đã xử lý từ trang ASP hiện hành sang trang </b>

ASP khác

<i>Cú pháp: Tham số path là đường dẫn của tập tin ASP cần chuyển điều khiển. </i>

<b>- Phương thức URLEncode: Tương tự như phương thức HTMLEncode, phương thức </b>

URLEcode dùng để mã hoá URL thành chuỗi

<i>Cú pháp: Khi mã hố chuỗi URL sang chuỗi bình thường nếu gặp các ký tự như sau, </i>

sẽ chuyển sang ký tự tương ứng:

<b> Ký tự khoảng trắng chuyển thành dấu + </b>

<b> Ký tự không thuộc ký tự chữ và số sẽ chuyển thành số hexadecimal. </b>

<b>2.4 SESSION VÀ COOKIE </b>

<b> Giới thiệu Cookie và Session </b>

<b>Điểm chung giữa Cookie và Session là việc lưu trữ và quản lý một số thông tin liên </b>

quan đến người dùng website, những thông tin này cần dùng trên nhiều trang web của cùng hệ thống website.

Thông tin được lưu trữ với khoảng thời gian quy định trước, và có thể tự hủy khi hết

<b>thời gian cho phép. Cookie và Session thuận tiện cho việc gửi thông tin qua lại giữa </b>

các trang web mà không cần dùng qua phương thức POST/GET… giảm thiểu việc phát sinh thêm biến.

<b>Ứng dụng thường thấy của Cookie và Session là lưu trữ thông tin đăng nhập của </b>

người dùng, xác định thời điểm đăng nhập, thoát khỏi website … Kết hợp với thao tác

<b>Redirect để có thể quản lý, chặn truy cập từ người dùng khi chưa đăng nhâp… </b>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

<b> Cookie </b>

<b>2.4.2.1 Đặc điểm cookie </b>

<b>Cookie được lưu trữ trên trình duyệt, khi người dùng sử dụng trình duyệt truy cập </b>

vào một website nào đó thì server sẽ gửi cookie về trình duyệt và lưu trữ trực tiếp trên

<i>máy người dùng (client). </i>

Cookie sẽ khác nhau cho mỗi loại trình duyệt, IP người dùng cũng như server của website. Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới trình duyệt .

Mỗi trình duyệt sẽ có cách quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 trình duyệt cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.

Trong ASP.NET các phương thức, thuộc tính liên quan đến việc xử lý Cookie được lưu trữ trong class HttpCookie. Các thuộc tính thường dùng trong Cookie:

<b>- Name: Tên Cookie. </b>

<b>- Domain: Tên miền của Cookie lưu trữ. </b>

<b>- Expires: Xác định thời gian hiệu lực của Cookie. - Value: Giá trị của Cookie. </b>

<b>- HasKeys: Cho biết Cookie có tập giá trị con hay không. - Values: Tập các giá trị của Cookie. </b>

Mỗi lần có yêu cầu lên website, trình duyệt sẽ gửi cookie lên server, server sẽ có cơ chế “đọc” cookie và xử lý cho tác vụ nào đó. Mỗi cookie được website gửi đến trình duyệt thường bao gồm 3 thành phần chính sau:

- Địa chỉ URL của website mà trình duyệt nhận cookie - Thời gian tồn tại của Cookie

- Giá trị lưu trữ.

<b>2.4.2.2 Phương thức thao tác </b>

- Ghi Cookie:

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Thao tác trên Cookie có nhiều Subkey

<b>- Xóa Cookie: Việc xóa Cookie thực chất là thao tác chỉnh thời gian hiệu lực về trước </b>

thời điểm hiện tại so với giờ hệ thống.

<b> Session 2.4.3.1 Đặc điểm </b>

Ta có thể chưa thực sự dùng cookie để lưu trữ Shoping Cart. Một cookie vừa quá nhỏ và quá đơn giản. Để làm việc ngoài giới hạn của Cookie, ASP.NET Framework hỗ

<b>trợ một chức năng mới được gọi là Session State. Giống với Cookie, Session lưu trữ dữ liệu trong phạm vi riêng với từng người sử dụng. Nhưng không giống với Cookie, </b>

<b>Session không giới hạn dung lượng, nếu ta cần lưu trữ hàng Gigabyte dữ liệu, hơn thế </b>

nữa Session có thể đưa ra điều đối tượng phức tạp hơn là chuỗi Text. Ta có thể lưu trữ một vài đối tượng trong Session. Ví dụ ta có thể lưu trữ một Dataset hay một Shoping Cart trong Session.

<b>2.4.3.2 Session trong ASP.NET </b>

Trong ASP.NET cũng như các cơng nghệ lập trình web khác, Session được tạo ra khi Client bắt đầu có yêu cầu gửi tới Server và sẽ kết thúc khi Client có thao tác hủy Session hoặc sau một thời gian (định trước) khơng có bất kỳ thao tác nào lên Server.

<b>Khi Session được tạo đồng thời phương thức Session_OnStart() sẽ được thực thi và tương tự khi kết thúc Session phương thức Session_OnEnd() sẽ được thực thi. </b>

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

<b>2.4.3.3 Một số phương thức thao tác trên session </b>

<i><b>- Timeout: Qui định khoảng thời gian (tính bằng phút) Web Server duy trì Session </b></i>

nếu người dùng không gởi yêu cầu nào về lại Server.

 Giá trị mặc định của Timeout là 20. Nếu không có yêu cầu nào kể từ lần yêu cầu cuối cùng sau một khoảng thời gian là <Timeout> phút, đối tượng Session mà Web server cấp cho lần làm việc đó sẽ tự động được giải phóng.

 Những yêu cầu sau đó, webserver coi như là một người dùng mới, và sẽ cấp một đối tượng Session mới.

Ví dụ: Thiết lập thời gian cho 1 phiên làm việc của user là 100 phút

<b>Session.TimeOut = 100; </b>

<i><b>Có thể thiết lập thuộc tính này trong tập tin Web.config </b></i>

<small><system.web> </small>

<small><sessionState timeout=“100” /> … </small>

<small></system.web> </small>

<b>- SessionID: chứa ID của session đang kích hoạt, mỗi user được phân biệt bởi </b>

sessionID gọi là mã phiên làm việc.

<b>- Count: trả về số session trong một ứng dụng </b>

<b>- Abandon(): giải phóng vùng nhớ được dùng để duy trì đối tượng Session trên Web </b>

Server ngay khi được gọi thực hiện. Những yêu cầu sau đó được Web server coi như là một người dùng mới.

<b>- Remove(“SessionName”): xoá dữ liệu trên biến “VarSession” - RemoveAll(): Xoá dữ liệu, nhưng sessionID vẫn tồn tại </b>

- Cũng có thể dùng Session để lưu các biến giá trị như Cookie

<i><b>Session[“nameVar”] = value; </b></i>

<b>TÓM TẮT </b>

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

<i>Bài học này giới thiệu về các đối tượng làm việc thông dụng và quan trọng trong kỹ thuật lập trình web là Request, Response, Cookie và Session. </i>

<i>Request là một thể hiện của lớp HttpRequest, Browser dùng Request object để gửi thông tin cần thiết tới Server. Đối tượng Request nhận tất cả giá trị mà trình duyệt của client gởi đến server thơng qua HTTP request. </i>

<i>Http Response được sử dụng để truyền dữ liệu webserver đến webBrowser </i>

<i>Đối tượng Server cung cấp các phương thức giúp chuyển điều khiển giữa các trang với nhau, lấy thông tin về mã lỗi, encode, … </i>

<i>Cookie được lưu trữ trên trình duyệt, khi người dùng sử dụng trình duyệt truy cập vào một website nào đó thì server sẽ gửi cookie về trình duyệt và lưu trữ trực tiếp trên máy người dùng (client). Cookie sẽ khác nhau cho mỗi loại trình duyệt, IP người dùng cũng như server của website. Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới trình duyệt. Mỗi trình duyệt sẽ có cách quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 trình duyệt cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau. </i>

<i>Giống với Cookie, Session lưu trữ dữ liệu trong phạm vi riêng với từng người sử dụng. Nhưng không giống với Cookie, Session không giới hạn dung lượng, nếu ta cần lưu trữ hàng Gigabyte dữ liệu, hơn thế nữa Session có thể đưa ra điều đối tượng phức tạp hơn là chuỗi Text. Ta có thể lưu trữ một vài đối tượng trong Session. Session được tạo ra khi Client bắt đầu có Requset gửi tới Server và sẽ kết thúc khi Client có thao tác hủy Session hoặc sau một thời gian (định trước) khơng có bất kỳ thao tác nào lên Server. </i>

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<b>BÀI TẬP </b>

Bài thực hành này ta sẽ sử dụng Visual Studio để thiết kế web với các trang nhập liệu, truyền tham số giữa các trang và hiển thị thơng tin chi tiết, ta có thể thực hiện các công việc này theo các bước sau:

Thiết kế form như hình dưới, nhấn vào nút Submit để hiển thị màn hình mới hiện các thơng tin đặt Hàng

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

<b>Bài 3 TRUY CẬP DỮ LIỆU </b>

Học xong bài này người học sẽ nắm được các nội dung sau:

<i>- Khái niệm về và ADO.NET, SqlDatasource, LinqDataSource, Linq và phương pháp </i>

<i>làm việc của từng đối tượng. </i>

<i>- Biết vận dụng thành thạo những đối tượng này trong bài lập trình liên quan. </i>

<b>3.1 TỔNG QUAN </b>

Phần lớn các ứng dụng hiện nay đều sử dụng cơ sở dữ liệu. Có nhiều cách thức truy

<b>cập dữ liệu khác nhau trong các công nghệ của Microsoft như ADO, RDO, DAO, ODBC. </b>

Tuy nhiên từ khi .NET Framework ra đời thì cơng nghệ ADO.NET đã được tích hợp,

<i><b>ADO.NET chứa các lớp cho phép các ứng dụng kết nối với các nguồn dữ liệu (connect </b></i>

<i>data sources), thực hiện các lệnh (execute commands), quản lý dữ liệu đã ngắt kết nối </i>

<i>(manage disconnected data). Với ADO.NET, người lập trình có thể viết ít mã lệnh thao </i>

tác cơ sở dữ liệu hơn so với các công nghệ trước trong các ứng dụng client-server hoặc các ứng dụng trên desktop.

Mặt khác, trong ASP.NET từ phiên bản .NET Framework 2.0 trở lên có thêm các thao

<b>tác với cơ sở dữ liệu mà không sử dụng ADO.NET như SqlDataSource, LINQ hoặc </b>

<b>Profiles. </b>

Ngoài ra các ứng dụng truy cập dữ liệu của .NET Framework cịn có thể truy nhập

<i>vào các nguồn dữ liệu ngoài như tập tin, Stream, XML, Ajax, web services, WCF, data </i>

<i>services. </i>

Trong bài học này, ta sẽ tạo ra một Web site project thao tác với cơ sở dữ liệu, sử dụng Visual Studio 2008 tạo một project Website, trong đó tạo một cơ sở dữ liệu tên là DB_TEST.MDF trong folder App_Data. (h3.1, h3.2), rồi Sử dụng cơ sở dữ liệu DB_TEST tạo 2 table HangHoa và KhoHang.

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<b>Hình 3.1: Thêm Sql cơ sở dữ liệu từ dự án </b>

<b>Hình 3.2: Thiết kế bảng </b>

<i>Sau đó, ta tạo một chuỗi kết nối (connection) trong tập tin cấu hình web.config và </i>

<b>đặt tên là ConnectionString cho phép truy nhập vào cơ sở dữ liệu. </b>

Nội dung tập tin web.config:

<small> --></small>

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<small>requirePermission=false” /> </configSections></small>

<small>connectionString=Data Source=(LocalDb)\v11.0;Initial 20131216190425;Integrated </small>

<small> </system.web> <entityFramework></small>

<b>3.2 TRUY CẬP DỮ LIỆU ADO.NET </b>

<b>ADO.NET Data Providers cho phép truy nhập vào một cơ sở dữ liệu cụ thể, thực </b>

<b>hiện các câu lệnh SQL và nhận dữ liệu. Data provider là chiếc cầu nối giữa ứng dụng </b>

và nguồn dữ liệu.

Lớp ADO.NET Data Provider bao gồm các thành phần:

<b>- Connection: Thực hiện kết nối tới nguồn cơ sở dữ liệu; </b>

<b>- Command: Thực hiện một câu lệnh SQL hoặc một store procedures; DataReader: </b>

Chỉ đọc và nhận dữ liệu từ một truy vấn;

<b>- DataAdapter thực hiện 2 nhiệm vụ: </b>

<b> Điền dữ liệu nhận được vào một DataSet, </b>

 Có thể ghi nhận sự thay đổi dữ liệu trong DataSet.

</div>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×