COOKIE và SESSION

Một phần của tài liệu Lập trình web động với PHP và MySql cơ bản và nâng cao của học viện NIIT (Trang 56 - 61)

1. Khái niệm Cookie và session

Thông thường, khi trao đổi dữ liệu qua mạng, các máy tính thường tìm cách giữ kết nối để có thể tiếp tục tái sử dụng. Ví dụ: sau khi kết nối tới MySQL server, chúng ta có thể gửi nhiều câu truy vấn SQL lên máy chủ và nhận về các kết quả khác nhau, hay khi truyền tải file qua giao thức FTP, chúng ta chỉ cần tạo một kết nối tới máy chủ và gửi nhiều file/thư mục cũng như làm nhiều việc khác trước khi ngắt kết nối.

Tuy nhiên, giao thức HTTP không hỗ trợ việc giữ kết nối thông suốt trong một phiên làm việc. Khi nhận được yêu cầu từ trình duyệt, Web server xử lý kết quả, trả kết

quả về cho trình duyệt và ngắt luôn kết nối, không quan tâm đến việc dữ liệu sau đó sẽ được xử lý ra sao.

Với cách hoạt động này, hệ thống sẽ không thể nhận biết được ai đang làm việc, cũng như những thông tin cần xử lý trong suốt phiên làm việc. Ví dụ: Làm thế nào để biết được một người đang sử dụng trang web, hay làm thế nào để biết rằng một người dùng đang lựa chọn các mặt hàng nào trong ứng dụng mua bán hàng qua mạng?

Để khắc phục vấn đề này, người ta phải sử dụng hai công cụ khác, đó là cookie và session.

Cookie là những mẩu dữ liệu nhỏ được lưu trữ trên máy khách, và mỗi khi máy khách gửi yêu cầu tới máy chủ thì các dữ liệu lưu trong cookie cũng được đồng thời gửi theo tới máy chủ.

Các ứng dụng có thể sử dụng cookie như một công cụ lưu trữ dữ liệu trong suốt phiên làm việc của người dùng hoặc lâu hơn. Người ta có thể sử dụng cookie để lưu trữ các thông tin cá nhân của người dùng.

Tuy nhiên, khả năng tạo cookie phụ thuộc vào trình duyệt và sự cho phép của người sử dụng. Mỗi trình duyệt thường chỉ chấp nhận một số lượng hữu hạn cookie, và người dùng có thể ngăn cản không cho phép trình duyệt tạo cookie.

Một nhược điểm nữa của cookie là tốc độ và tính bảo mật. Vì cookie được lưu trên máy khách nên mỗi lần kết nối tới máy chủ, cookie sẽ được gửi lên máy chủ dẫn đến việc tiêu tốn băng thông và thời gian truyền thông tin. Các thông tin gửi qua mạng cũng có thể bị đọc trộm qua các nút mạng trung gian, hoặc có thể bị đọc trộm bởi các ứng dụng chuyên biệt trên máy tính cá nhân. Đã có một thời gian dài, cookie là “miếng mồi ngon” để các tin tặc khai thác thông tin cá nhân như: mã số thẻ ngân hàng, mật khẩu hộp thư điện tử...

Để khắc phục nhược điểm của cookie, người ta phát minh ra một công cụ khác, đó là session.

Ngược lại với cookie, session là những mẩu thông tin nhỏ được lưu trên máy chủ và tồn tại trong suốt phiên làm việc của người dùng. Thông thường, phiên làm việc được tạo ra khi trình duyệt kết nối tới máy chủ lần đầu tiên, và sẽ tự huỷ nếu vượt quá một khoảng thời gian xác định hoặc người dùng đóng trình duyệt.

Việc sử dụng session sẽ giúp khắc phục những nhược điểm của cookie: Session được lưu trữ trực tiếp trên máy chủ nên không bị người dùng ngăn cấm và không lo bị lộ thông tin như cookie. Các thông tin lưu trong session cũng không bị giới hạn như cookie...

Bảng dưới đây so sánh giữa cookie và session

Cookie Session

Lưu thông tin về phiên làm việc trên máy khách

Lưu thông tin về phiên làm việc trên máy chủ

Vẫn có thể tồn tại ngay cả khi người dùng thoát khỏi trình duyệt

Bị xoá số khi người dùng thoát khỏi trình duyệt

Người dùng có thể cấm cookie Người dùng không thể cấm Session Có kích thước và số lượng hữu hạn Không giới hạn kích thước và số lượng

Bảo mật lỏng lẻo Bảo mật tốt hơn

2. Cách thức làm việc với cookie và session

Cũng giống như form, các thông tin lưu trong cookie hay session đều được thiết lập và truy xuất thông qua tên của cookie hay session.

a. Làm việc với cookie

Để khởi tạo một biến cookie, chúng ta sử dụng hàm setcookie. Hàm này có cú pháp như sau:

bool setcookie(tên, giá_trị, t) Trong đó:

- Tên: Tên cookie được tạo ra

- giá_trị: giá trị được đặt cho cookie. Đây là tham số tuỳ chọn

- t: Số giây xác định thời gian hết hạn của cookie. Đây là tham số tuỳ chọn

Chú ý:

- Lệnh setcookie phải được gọi trước khi gửi bất cứ nội dung gì về client (Trước các thẻ HTML, trước echo, print)

- Để thiết lập thời gian hết hạn của cookie thường sử dụng hàm time()+khoảng thời gian (tính bằng giây)

Để lấy thông tin lưu trong cookie, chúng ta truy xuất thông qua biến mảng $_COOKIE[] với chỉ số của mảng chính là tên của cookie.

Ví dụ sau đây minh hoạ việc đếm số lần truy cập vào trang web của một người dùng riêng lẻ:

<?php

$Solan=0;

if (isset ($_COOKIE["lantruycap"]) and is_numeric ($_COOKIE["lantruycap"])) {

$Solan=$_COOKIE["lantruycap"]; }

$Solan++;

setcookie ("lantruycap", $Solan);

echo "Ban da truy cap trang Web nay {$Solan} lan"; ?>

Lưu file và thực thi nhiều lần trên trình duyệt để xem số lần đã truy cập được hiển thị tăng dần trên trình duyệt.

Để xoá bỏ một cookie, chúng ta chỉ việc gọi hàm setcookie với tham số đầu tiên là tên của cookie cần xoá.

Ví dụ, để xoá bỏ cookie có tên “lantruycap” ở trên: <?php

setcookie("lantruycap"); echo ("Cookie da bi xoa"); ?>

b. Làm việc với session

Trước khi có thể truy cập vào các thông tin trong session, chúng ta phải gọi hàm session_start(). Hàm này được dùng để đọc các thông tin lưu trong session và đẩy vào mảng $_SESSION.

Sau khi đã gọi hàm session_start(), chúng ta có thể thêm, xoá các thông tin trong session đơn giản bằng cách thêm, xoá hoặc sửa trực tiếp mảng $_SESSION.

Ví dụ dưới đây đếm số lượt truy cập của một người dùng bằng cách sử dụng session: <?php session_start(); if (!isset($_SESSION["luottruycap"]) or !is_numeric ($_SESSION["luottruycap"])) { $luottruycap=1;

else {

$luottruycap=$_SESSION["luottruycap"]+1; }

$_SESSION["luottruycap"]++;

echo ("Ban da truy cap {$luottruycap} lan"); ?>

Để huỷ toàn bộ session, chúng ta có thể gọi hàm session_destroy(). Session cũng có thể tự huỷ sau khi người dùng đóng trình duyệt.

3. Chú ý

- Các hàm setcookie() và session_start() phải được sử dụng trước khi gửi bất kỳ dữ liệu nào xuống trình duyệt.

Ví dụ đúng: <?php session_start() echo (“<HTML><BODY>”); ?> Ví dụ sai: <HTML> <?php session_start(); ?>

- Dữ liệu lưu trong cookie hay session có thể được dùng trên các trang web khác nhau, trong các file khác nhau trên cùng một website.

Đoạn ví dụ sau đây lấy thông tin trong biến $_SESSION["luottruycap"] ở trên: <?php

session_start();

echo ("Gia tri cua session <i>luottruycap</i> la: {$_SESSION["luottruycap"]}"); ?>

Lưu đoạn mã trên trong một file PHP riêng biệt và chạy thử, bạn sẽ nhận được giá trị trong biến $_SESSION["luottruycap"] (trong trường hợp giá trị này đã được thiết lập trước đó).

4. Tóm tắt và bài tập ứng dụng:

• Session và cookie là hai mảng dữ liệu đặc biệt được lưu trữ trong suốt quá trình làm việc của người sử dụng. Thông tin trong session được lưu trữ trên máy chủ, còn thông tin trong cookie thì được lưu trên trình duyệt.

• Để tạo hay huỷ một biến cookie, chúng ta dùng hàm setcookie().

• Để truy cập vào biến cookie, chúng ta truy cập thông qua mảng $_COOKIE[“tên_cookie”]

• Để khởi tạo session, chúng ta dùng hàm session_start()

• Để truy cập và thay đổi các giá trị lưu trong session, chúng ta dùng biến mảng $_SESSION[“tên_session”]

b. Bài tập ứng dụng:

- Tạo một bảng thông tin người dùng trong đó có các trường xác định tên truy cập và mật khẩu.

- Tạo một form đăng nhập bằng HTML

- Khi người dùng nhập tên truy cập và mật khẩu thì kiểm tra xem tên truy cập và mật khẩu có tồn tại trong CSDL không? Nếu có thì coi như người đó đã đăng nhập và xác lập biến session để đánh dấu người dùng đã đăng nhập.

Một phần của tài liệu Lập trình web động với PHP và MySql cơ bản và nâng cao của học viện NIIT (Trang 56 - 61)

Tải bản đầy đủ (DOC)

(78 trang)
w