1. Trang chủ
  2. » Thể loại khác

QUẢN LÝ SESSION. ThS. Phan Thanh Toàn

38 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Quản Lý Session
Tác giả ThS. Phan Thanh Toàn
Thể loại bài
Định dạng
Số trang 38
Dung lượng 4,37 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

SỬ DỤNG CÁC FIELD ẨN HIDDEN FIELDS• Kỹ thuật này vẫn còn thông dụng và được áp dụng bằng cách nhúng thông tin vàotrang web cho client bằng các thẻ HIDDEN theo cú pháp: • Nhược điểm: Dù

Trang 1

BÀI 6 QUẢN LÝ SESSION

ThS Phan Thanh Toàn

Trang 2

TÌNH HUỐNG DẪN NHẬP

Nam đang cần thiết kế Website thương mại và đang cần tạo một giỏ hàng cho phépngười sử dụng có thể chọn các sản phẩm và lưu lại các thông tin về sản phẩm đã chọn.Yêu cầu mỗi người sử dụng cần có một danh mục các sản phẩm riêng rẽ và được lưutrữ lại trong suốt phiên làm việc trên site của khách hàng đó

Trang 3

MỤC TIÊU

Trình bày được khái niệm về session và cookie

Trình bày được cách tạo và duy trì session

Trình bày được các phương pháp theo dõi và quản lý session

Vận dụng được session vào việc lưu trữ các dữ liệu trong các trang JSP

Trang 5

1 GIỚI THIỆU

• HTTP là protocol không trạng thái (stateless protocol), nghĩa là server khi tiếp nhậnmột yêu cầu sẽ trả về một đáp ứng rồi cắt kết nối, không lưu trữ thông tin trạng thái

về yêu cầu vừa qua Server xử lý độc lập theo từng yêu cầu từ client

• Làm sao biết được một user đã vào Website của ta hay chưa?

• Làm sao theo dõi một user để không cho phép user truy cập những thông tin “nhạycảm”?

→ Thông qua session, người phát triển web làm được điều trên

Trang 6

2 SESSION LÀ GÌ?

• Định nghĩa - Cấu trúc thông tin của một session;

• Khởi tạo và duy trì session;

• Cơ chế quản lý session trong server

Trang 7

2.1 ĐỊNH NGHĨA – CẤU TRÚC THÔNG TIN CỦA MỘT SESSION

• Session: Chuỗi các giao tiếp của một client riêng biệt với một server trong mộtkhoảng thời gian (Mỗi khi một người sử dụng vào thăm website sẽ tạo ra mộtsession)

• Một session được xem như là một đối tượng được lưu trong server cho phép ứngdụng (JSP, servlet) truy xuất giúp truy cập được thông tin về phiên làm việc củaclient

• Một đối tượng session là một danh sách <Key, Value> Trong đó, Key là tên khóa(AttributeName) cho một thuộc tính của session này, Value tham khảo tới đối tượngchứa dữ liệu của Key này

Trang 8

2.2 KHỞI TẠO VÀ DUY TRÌ SESSION

Một session được một client khởi tạo (khi user lần đầu tiên đưa một request cho mộtWebsite) và được nhận diện bằng một Session_ID và tồn tại khi các yêu cầu sau đâycòn thỏa mãn:

1 User không đóng browser

2 User không log-out khỏi web site

3 Có một số giao tiếp giữa user và Website Tuy nhiên, nếu user không tương tác gìvới Website thì sau một thời khoảng (thường là 30 phút - admin ấn định bênserver) session sẽ bị đóng

Trang 9

2.3 CƠ CHẾ QUẢN LÝ SESSION TRONG SERVER

Server có một bảng băm (hash table) ở mức cao nhất chứa các entry là các cặp <Key,Value> với Key=session_ID cho tất các các session hiện hành Mỗi Value lại chỉ tới mộtbảng băm quản lý một đối tượng session cho một client

Bảng quản lý các session Bảng quản lý một session cho một client

Trang 10

CÂU HỎI THẢO LUẬN

Session là gì?

Trang 11

3 CÁC CƠ CHẾ THƯỜNG DÙNG ĐỂ THEO DÕI SESSION

Quan niệm về duy trì trạng thái giữa các yêu cầu khác nhau được gọi là “theo dõisession - session tracking” Có một số kỹ thuật giúp theo dõi session:

1 Sử dụng thông tin HTTP (HTTP information)

2 Sử dụng các field ẩn (Hidden fields)

3 Sử dụng các thông tin thêm từ đường dẫn truy cập và kỹ thuật ghi lại URL

4 Sử dụng các cookies

Trang 12

3.1 SỬ DỤNG HTTP INFORMATION

• Kỹ thuật này sẽ bẫy (trap) các thông tin trong phần header của HTTP như: E-mailheader, thông tin về IP của client (IP address, địa chỉ internet, dữ liệu 32 bit) Tuynhiên, với thời gian, kỹ thuật này trở nên lỗi thời do user sử dụng proxy server (máytrạm trong một mạng LAN) làm IP address thay đổi, khó hiện thực khả năng bảomật

• Bản chất của kỹ thuật này là mỗi khi client truy cập Website, địa chỉ IP của clientđược lưu lại để theo dõi Trong mạng LAN, mọi máy trong mạng đều có chung một

IP (chỉ có máy LAN server mới kết nối Internet, máy được ủy nhiệm - proxy) do vậykhông thể phân biệt 2 client trong một mạng LAN khi cả 2 máy cùng truy cậpInternet

Trang 13

3.2 SỬ DỤNG CÁC FIELD ẨN (HIDDEN FIELDS)

• Kỹ thuật này vẫn còn thông dụng và được áp dụng bằng cách nhúng thông tin vàotrang web cho client bằng các thẻ HIDDEN theo cú pháp:

<INPUT TYPE=”HIDDEN” NAME=”objectName” VALUE=”value”>

• Nhược điểm: Dù user không thấy được nội dung khi xem trong trình duyệt nhưnguser xem được nội dung ẩn này khi xem dạng code của trang → mất tính bảo mật

Trang 14

3.3 SỬ DỤNG THÔNG TIN THÊM TỪ ĐƯỜNG DẪN VÀ GHI LẠI URL

• Kỹ thuật này được áp dụng bằng cách thêm các thông tin vào các liên kết (thẻ <Ahref…>) Sau đó, sử dụng PATH-INFO header để trích thông tin này ra

• Ví dụ:

 Thay: <a href=”/myJSPpage.jsp”> Next </a>

bằng: <a href=”/myJSPpage.jsp?login=”John”&Item=”book1”> Next </a>

 Để khi user kích Next, thông tin là cặp <”John”,”book1”> được truyền cho tàinguyên được truy cập là myJSPpage.jsp TRong tập tin JSP này, các tham sốlogin và Item được truy cập

Trang 15

• Một số Web Server gửi cookie cho client có xem xét đến trạng thái của client.

• Thiết lập cookie: Bằng cách thiết lập Set-Cookie header trong đáp ứng HTTP theo cúpháp sau:

Set-Cookie: Name=VALUE; expires=DATE; path= PATH;

Ví dụ:

Set-Cookie: CUSTOMER=ROOMY;

path=/;

expires=Friday, 20-Jan-2006 22:30:00 GMT;

Trang 16

3.4 SỬ DỤNG COOKIES (tiếp theo)

• Expires: Tham số chỉ định ngày hết hiệu lực (expiry date) của cookie này

• Thường các trình duyệt sẽ lưu các thông tin về cookie thành các tệp tin nếu cookie

có gán ngày hết hạn

• Nếu cookie không lưu ngày hết hạn thì cookie chỉ được lưu trong bộ nhớ

• Nhược điểm của cookie:

 User có quyền chấp nhận cookie hay không Do vậy, nếu user không chấp nhậncookie, server sẽ thất bại khi cần nhận diện user

 Trình duyệt cũng có thể không chấp nhận cookie

 Không thể thiết lập kích thước cookie quá lớn, thường chỉ 4KB và không vượtquá 20 cookies cho một domain

Trang 17

3.4 SỬ DỤNG COOKIES (tiếp theo)

Thiết lập chế độ cookie trong Internet Explorer:

Trang 18

CÂU HỎI THẢO LUẬN

Nêu cú pháp để tạo cookie?

Trang 19

4 CÁC CƠ CHẾ THEO DÕI SESSION TRONG JSP

• Đối tượng session được JSP engine dùng để chia sẻ thông tin về user giữa các tàinguyên mà user này truy cập Nói cách khác, đối tượng session chính là cách để ghinhớ lại trạng thái của các Website HTTP không trạng thái

• Mặc định, các trang JSP sẽ truy xuất đối tượng ngầm session này Cách cơ bản màJSP engine sử dụng để theo dõi một session như sau:

 Client gửi một request tới server;

 Server gửi một cookie cho client với thông tin: <Session_ID,

Current_Browser_ID>;

 Khi client gửi thêm request đến server, cookie được đính vào HTTP requestheader Server truy xuất header để kiểm tra và chọn ra đối tượng session phùhợp với user này;

 Nếu client mở mới một cửa sổ browser (chạy lại trình duyệt) thì một đối tượngsession mới được khởi tạo Tuy nhiên, nếu user lại mở một cửa sổ mới từbrowser đang hoạt động hiện hành thì hai cửa sổ của client cùng dùng chungmột session

Trang 20

4 CÁC CƠ CHẾ THEO DÕI SESSION TRONG JSP (tiếp theo)

• Hai phương pháp chính thường dùng để quản lý session trong JSP

Theo dõi session bằng cookie (using cookie)

• JSP và servlet quản lý cookie thông qua lớp javax.servlet.http.Cookie Lớp này cungcấp nhiều method giúp quản lý cookie

• Các phương thức chính của lớp cookie:

 Cookie(String name, String value): Tạo 1 cookie với <name,value>;

Ví dụ: Tạo một cookie lưu xâu kí tự Hello how are you? Và sau đó lấy lại thôngtin trong cookie và in giá trị cookie ra trình duyệt

Trang 21

4 CÁC CƠ CHẾ THEO DÕI SESSION TRONG JSP (tiếp theo)

Trang 22

4 CÁC CƠ CHẾ THEO DÕI SESSION TRONG JSP (tiếp theo)

Cookie class method Summary

Object Clone() Tạo một copy của cookie, Overrides hành vi của lớp object

String getComment() – Lấy chú thích trong cookie, null nếu cookie không có chú thích

String getDomain() – Lấy tên domain đã thiết lập trong cookie

int getMaxAge() – Lấy tuổi thọ lớn nhất (số giây) của cookie, trả trị -1 nếu expirescủa cookie không được ấn định (bị mất lúc browser shutdown

String getName() – Lấy phần tên của cookie

String getPath() – Lấy đường dẫn trên server – phần path

boolean getSecure() – True nếu trình duyệt sử dụng protocol có bảo mật

String getValue() – Lấy trị, phần VALUE của cookie

int getVersion() – Lấy phiên bản của cookie.

void setComment(String purpose) – Thiết lập phần chú thích trong cookie

void setDomain(String pattern) – Thiết lập phần Domain

void setMaxAge(int expiry) – Thiết lập phần expires (theo đơn vị giây)

void setPath(String uri) – Thiết lập đường dẫn (path)

Trang 23

4 CÁC CƠ CHẾ THEO DÕI SESSION TRONG JSP (tiếp theo)

• Xóa cookie, không ghi cookie vào đĩa cứng máy client:

 Một cookie có thể bị xóa bằng cách thiết lập expires=0 (setMaxAge(0));

 Một cookie được ấn định tuổi thọ bằng setMaxAge(Số Âm) sẽ không được ghivào máy client (nghĩa là bên ngoài browser) mà chỉ tồn tại trong bộ nhớ RAM.Khi trình duyệt shutdown, cookie này bị mất

Theo dõi cookie bằng cách ghi lại URL (Rewriting URL)

• Khi cookie không được client chấp nhận, phương pháp ghi lại URL (URL rewriting, dùvất vả hơn kỹ thuật cookies) được áp dụng để quản lý session Các JSP containerkhác nhau (do các hãng phần mềm khác nhau tạo ra) có cách ghi lại URL khác nhau

Có JSP container làm việc này tự động, có JSP container lại để cho người dùng phảihiện thực

• Trong kỹ thuật ghi lại URL, session ID sẽ là một thành phần trong tham số của querystring của user

• Trong interface javax.servlet.http.HttpServletRespone, có hai method giúp người lậptrình ghi lại URL

Trang 24

4 CÁC CƠ CHẾ THEO DÕI SESSION TRONG JSP (tiếp theo)

String encodeRedirectURL(String url) – mã hóa url để dùng trong method

sendRedirect Nếu không cần mã hóa thì trả về chính url đó

String encodeURL(String url) – mã hóa url bằng cách thêm vào session ID

vào url này Nếu không cần mã hóa thì trả về chính url đó

• Khi user di chuyển giữa các trang, session ID được thêm vào chuỗi URL Nghĩa là,chúng ta phải tạo ra một session rồi gửi session ID cho servlet response đóng góitheo kỹ thuật URL rewriting Khi user khởi tạo một request, chúng ta lại phải tríchxuất session ID trong tham số của query string và sử dụng ID này

• Ví dụ sau sẽ minh họa việc sử dụng session để truyền thông tin giữa hai trang: trangExampleOfSession_URL_1.JSP sẽ khởi tạo một session và trangExampleOfSession_URL_2.JSP sẽ lấy thông tin của session

Trang 25

4 CÁC CƠ CHẾ THEO DÕI SESSION TRONG JSP (tiếp theo)

• Trang ExampleOfSession_URL_1.JSP:

• Trang ExampleOfSession_URL_21.JSP:

Trang 26

5 CHU KỲ SỐNG CỦA SESSION

• Chu kỳ sống của một session (session lifecycle);

• Sử dụng đối tượng session;

• Ràng buộc một đối tượng vào đối tượng request

Trang 27

5.1 CHU KỲ SỐNG CỦA MỘT SESSION (SESSION LIFECYCLE)

• Khi server nhận được một yêu cầu từ client, session được khởi tạo và được gán mộtsession ID

• Session ID được truyền về cho client như là một cookie hoặc là một biến ẩn (hiidenvariable)

• Session này được xem là “mới” cho đến khi user quay lại (truy xuất tiếp Website),session ID sẽ được đính kèm vào query string của client khi truy xuất tiếp server(trường hợp có dùng kỹ thuật URL rewriting) hoặc như là một cookie (trường hợpkhông dùng kỹ thuật URL rewriting) và server biết rằng session đã được tạo rồi.Trường hợp server không hỗ trợ kỹ thuật URL rewriting hoặc client không cho phépcookie thì session ID không trở về được server và truy xuất mới từ client sẽ khởi tạomột session mới

• Session tồn tại trong server cho đến khi session này không còn hợp lệ (tức hết thời lượng, page timeout) hay bị “chết” (nghĩa là server shutdown)

Trang 28

5.1 CHU KỲ SỐNG CỦA MỘT SESSION (SESSION LIFECYCLE) (tiếp

theo)

• Session là công cụ để theo dõi một client trong một khoảng thời gian Do vậy, nếuuser sang Website khác rồi lại trở về thì có thể session đã bị time-out, điều này tùythuộc vào thiết lập time-out trên server

• Ứng dụng có thẻ lưu trữ session trong một database để cho phép các session có thờilượng hợp lệ dài

• Các session được container cư xử như là một dịch vụ thư mục nên có thể tham khảotới session thông qua một tên gọi (chuỗi ký tự)

• Các đối tượng HttpSession được dùng để lưu trữ thông tin về các session trong đốitượng servlet context

• Đối tượng HttpServletRequest có hành vi getSession() để lấy session kết hợp vớirequest này

Trang 29

5.2 SỬ DỤNG ĐỐI TƯỢNG SESSION

Một số phương thức cơ bản của lớp HttpSession

HttpSession interface Method Summary

Object getAttribute(String name) – Lấy đối tượng là trị một thuộc tính.

Enumeration getAttributeNames() – Tập tên các đối tượng thuộc tính của session.

long getCreationTime() – Lấy giờ tạo theo millisec kể từ giữa đêm January 1, 1970

GMT.

String getId() – Lấy session ID.

long

getLastAccessedTime() – Lấy giờ truy xuất cuối từ client, theo millisec kể từ

giữa đêm January 1, 1970 GMT và là thời gian container nhận được yêu cầu từ client.

int getMaxInactiveInterval() – Lấy thời khoảng (đơn vị giây) mà session nàycòn hợp lệ (sever còn theo dõi client).

ServletContext getServletContext() – Lấy ServletContext mà session này thuộc về?

void Invalidate() – Kiểm tra session còn hợp lệ?

boolean isNew() – Kiểm tra session có còn là session mới?

void removeAttribute(String name) – Loại bỏ một thuộc tính.

void setAttribute(String name, Object value) – Ràng buộc, thiết lập trị cho 1 thuộc

tính, trị phải là Object.

Trang 30

5.2 SỬ DỤNG ĐỐI TƯỢNG SESSION (tiếp theo)

• Ví dụ 1: Chương trình sau đây sẽ sử dụng biến đối tượng session để đếm số lầnngười sử dụng bấm refresh trang web

Trang 31

5.2 SỬ DỤNG ĐỐI TƯỢNG SESSION (tiếp theo)

• Ví dụ 2: Chương trình sau đây sẽ sử dụng TimeBean đã xây dựng Truy xuất đốitượng session thông qua đối tượng request Sau đó, thông qua đối tượng sessiontruy xuất Bean

Trang 32

5.3 RÀNG BUỘC MỘT ĐỐI TƯỢNG VÀO ĐỐI TƯỢNG REQUEST

• Servlet 2.2 API cung cấp một cách làm tương tự như lưu trữ một đối tượng vào đốitượng session Đó là ràng buộc một đối tượng vào đối tượng request rồi sau đó tríchxuất đối tượng này

• Sự khác biệt giữa hai cách lưu trữ:

 Đối tượng bị ràng buộc vào một request object chỉ tồn tại khi request đó còntồn tại (request kết thúc khi server đã trả response cho request này)

 Trong khi đó, đối tượng lưu trong session tồn tại cho đến khi session không cònhợp lệ nữa → Đối tượng được lưu trong session tồn tại lâu hơn so với khi đượcràng buộc vào đối tượng request

• Sử dụng: Ràng buộc một đối tượng vào request object thường dùng khi forwardhoặc include một trang JSP (cơ chế forwarding hoặc interface RequestDispatcher)

Trang 33

5.3 RÀNG BUỘC MỘT ĐỐI TƯỢNG VÀO ĐỐI TƯỢNG REQUEST

(tiếp theo)

ServletRequest interface Method Summary

java.lang.Object getAttribute(java.lang.String name) - Lấy value của một thuộc

tính, null nếu không có thuộc tính này

java.util.Enumeration getAttributeNames() - Lấy tập tên thuộc tính

java.lang.String getCharacterEncoding() – Lấy tên bộ mã được dùng

int getContentLength() – Lấy độ dài nội dung -1 nếu không biết java.lang.String getContentType() – Lấy MIME type của thân request

ServletInputStream getInputStream() java.lang.String getLocalAddr() – Lấy Internet Protocol (IP)

java.util.Locale getLocale() – Lấy thông tin địa phương dựa Accept- Language

header

java.util.Enumeration getLocales()

java.lang.String getLocalName() – Lấy tên của Internet Protocol (IP) interface

int getLocalPort() – Lấy Internet Protocol (IP) port number java.lang.String getParameter(String name) – Lấy value của tham số name

Trang 34

5.3 RÀNG BUỘC MỘT ĐỐI TƯỢNG VÀO ĐỐI TƯỢNG REQUEST

(tiếp theo)

java.util.Enumeration getParameterNames() – Lấy tập tên tham số

java.lang.String[] getParameterValues(String name) – Lấy trị của tham số mảng

java.lang.String getProtocol() – Lấy tên protocol đã dùng theo dạng

protocol/majorVersion.minorVersion, thí dụ, HTTP/1.1

java.io.BuffereReader getReader()

java.lang.String getRemoteHost() – Lấy đích danh của client hay proxy

Int getRemotePort() – Lấy IP source port của client hay proxy

RequestDispatcher getRequestDispatcher(String path) – Lấy RequestDispatcher

object đóng vai trò đóng gói tài nguyên với path đã biết

java.lang.String getScheme() – Lấy tên của cơ chế tạo request này, thí dụ http,

https, hay ftp

java.lang.String getServerName() – Lấy tên server mà request này được gửi đến

isSecure() – Request này có dùng kênh truyền có bảo mật? Thí

Ngày đăng: 07/04/2022, 19:38

HÌNH ẢNH LIÊN QUAN

Server có một bảng băm (hash table) ở mức cao nhất chứa các entry là các cặp &lt;Key, Value&gt;vớiKey=session_ID chotấtcác các sessionhiệnhành.MỗiValuelại chỉ tới một bảng băm quảnlýmột đối tượngsession chomộtclient. - QUẢN LÝ SESSION. ThS. Phan Thanh Toàn
erver có một bảng băm (hash table) ở mức cao nhất chứa các entry là các cặp &lt;Key, Value&gt;vớiKey=session_ID chotấtcác các sessionhiệnhành.MỗiValuelại chỉ tới một bảng băm quảnlýmột đối tượngsession chomộtclient (Trang 9)
w