[ST]Session vs Cookie

Các mục thông tin về tin học khác...
Forum rules
Nếu có ý kiến tạo thêm mục kiến thức khác ... Hãy thông báo trong đây ... để được cân nhắc tạo!
Post Reply
tthlan
Quản trị viên
Posts: 75
Joined: Tue Aug 23, 2016 8:13 am

[ST]Session vs Cookie

Post by tthlan »

1.Cookie và Session là gì?!

Đ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 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 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 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. Ứng dụng thường thấy của Cookie và Session là lưu trữ thông tin đăng nhập của 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 Redirect để có thể quản lý, chặn truy cập từ người dùng khi chưa đăng nhâp…

PHP giúp cho việc tương tác giữa máy chủ (server site) và máy khách (client request) thông qua cookie và session. Session được lưu trữ trên server còn cookie được lưu trữ tại tại máy khách thông qua trình duyệt (browser).


2. Điểm riêng của Cookie

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. Mỗi lần có request 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 đó.

Cookie cho phép ứng dụng web của bạn lưu trữ một lượng nhỏ kiểu văn bản(4 - 6KB)trên trình duyệt (browser) của máy khách (client). Phần lớn công dụng của cookie là để lưu giữ trạng thái của phiên làm việc (session), trao đổi dữ liệu giữa các trang ( các trang trong tương tác nhau trong 1 hệ thống website) ngoài ra nó còn được sử dụng cho việc truy xuất dữ liệu từ file cookie trên máy khách. Lưu trữ dữ liệu bằng cookie không phải là một cơ chế an toàn, dữ liệu trong cookie có thể thấy và chỉnh sửa thông qua trình duyệt của người dùng.

Người ta thường dùng cookies để lưu trữ các thông tin có liên quan đến nhiều phiên làm việc khác nhau (qua nhiều lần đóng và mở session). Vì giao thức HTTP là giao thức không lưu trạng thái (Mỗi khi xử lý xong một yêu cầu từ máy khách là nó sẽ ngắt kết nối và có thể kết thúc phiên), nên cookie sinh ra để làm nhiệm vụ lưu trữ một số biến trạng thái để khắc phục nhược điểm này.

Khác với dữ liệu gửi từ form (Post hay Get) thì cookies sẽ được trình duyệt tự động gửi đi theo mỗi lần truy cập lên máy chủ. Trong quá trình làm việc, cookie có thể bị thay đổi giá trị. Cookie sẽ bị vô hiệu hoá nếu cửa sổ trình duyệt điều khiển cookie đóng lại và cookie hết thời gian có hiệu lực. Theo mặc định, thời gian “sống” của cookies là tồn tại cho đến khi cửa sổ trình duyệt sử dụng cookies bị đóng. Tuy nhiên người ta có thể thiết lập tham số thời gian để cookie có thể sống lâu hơn (6 tháng chẳng hạn). Ví dụ như chế độ Remember ID & Password của 1 số trang web.

p/s:
-Để lưu trữ Cookie ta dùng cú pháp sau và phải đặt trước thẻ html: setcookie($name, $value, $expire, $path, $domain).
-xoá : setcookie("username", "", time()-3600);


3. Điểm riêng của Session

Session dùng để lưu phiên làm việc của người dùng trên trang website. Kkhác với Cookie, Session được lưu trữ trên webServer. Session được lưu với một chuỗi ký tự dài gọi là ID, Sessiong kết thúc khi bị xóa hoặc hết phiên làm việc (đóng trình duyệt – Cookie lưu trên file ở Client nên khi đóng trình duyệt sẽ không mất Cookie).

HTTP là một giao thức trạng thái, server sẽ không biết được các request giống nhau của các người dùng khác nhau - nhưng mỗi người dùng thì lại có yêu cầu server trả về một respone đúng theo yêu cầu của mình (request là giống nhưng respone phải khác). Session (phiên làm việc) được tạo ra để phân chia ra các trạng thái khác nhau của request. Quản lý session thông qua session id - có thể được gửi từ cookie hoặc nhận được từ form.

Session hoạt động như thế nào? session khi sinh ra được lưu trên 1 file có tên dài dòng, khó đoán và được tạo ngẫu nhiên là session id trên máy chủ, và đồng thời ở máy client cũng có 1 cookie sinh ra có nội dung (hay giá trị) đúng như session id (để có thể so khớp session nào là của client nào) đối với mỗi ngôn ngữ lập trình web sẽ có tên cookie quy định như php là PHPSESSID, jsp là JSESSIONID, … Các giá trị của biến session sẽ được lưu trong file đó (khác so với các biến thông thường là được lưu trong bộ nhớ server – trong php file nội dung được lưu trong thư mục thiết lập trong file php.ini (tham số session.save_path)).

Ứng dụng: Thông thường ứng dụng vào việc quản lý đăng nhập, đăng xuất của thành viên. Với những tác vụ cần xác nhận là thành viên mới sử dụng được, chúng ta cần yêu cầu thành viên đăng nhập vào hệ thống. Nhưng nếu chỉ dùng biến thông thường thì mỗi lần cần thực hiện lại phải đăng nhập vào. Trong khi ấy, nều dùng session thì sau khi đăng nhập, 1 biến session được tạo ra (ví dụ là user_id), thì biến này sẽ tồn tại từ trang này sang trang khác, như thế khi cần thực hiện tác vụ khác cũng cần đăng nhập, ta chỉ cần kiểm tra xem có tồn tại biến user_id này hay chưa là đủ. Nếu tồn tại rồi thì thôi, chưa tồn tại thì đăng nhập.

p/s: để php tạo ra một session, sử dụng hàm session_start() - php sẽ tự sinh ra một session id hoặc tạo một session được nhận từ cookie, form.

Code: Select all

To find out what the default (file-based-sessions) session timeout value on the server is you can view it through a ini_get command:

// Get the current Session Timeout Value
$currentTimeoutInSecs = ini_get(’session.gc_maxlifetime’);

Change the Session Timeout Value

// Change the session timeout value to 30 minutes  // 8*60*60 = 8 hours
ini_set(’session.gc_maxlifetime’, 30*60);
//————————————————————————————–

// php.ini setting required for session timeout.

ini_set(‘session.gc_maxlifetime’,30);
ini_set(‘session.gc_probability’,1);
ini_set(‘session.gc_divisor’,1);
//————————————————————————————–
//if you want to change the  session.cookie_lifetime.
//This required in some common file because to get the session values in whole application we need to write session_start();  to each file then only will get $_SESSION global variable values.

$sessionCookieExpireTime=8*60*60;
session_set_cookie_params($sessionCookieExpireTime);
session_start();

// Reset the expiration time upon page load //session_name() is default name of session PHPSESSID

if (isset($_COOKIE[session_name()]))
setcookie(session_name(), $_COOKIE[session_name()], time() + $sessionCookieExpireTime, “/”);
//————————————————————————————–
//To get the session cookie set param values.

$CookieInfo = session_get_cookie_params();

echo “<pre>”;
echo “Session information session_get_cookie_params function :: <br />”;
print_r($CookieInfo);
echo “</pre>”;
//————————————————————————————–
Some Description of session related setting for php.ini file.
4. Sử dụng Cookie hay Session?

Sử dụng Session hoặc Cookie là tuỳ vào lựa chọn của Lập trình viên, tuy nhiên Session thường được ưa chuộng hơn Cookie vì một số lý do sau:

* Trong một số trường hợp Cookie không sử dụng được. Có thể browser đã được thiết lập để không chấp nhận cookie, lúc đó session vẫn sử dụng được bằng cách truyền session ID giữa các trang web qua URL, ví dụ: script.php?session=abc123.
* Lượng data truyền tải giữa browser và server: chỉ mỗi session ID được truyền giữa browser và server, data thực sự được website lưu trữ trên server.
* Bảo mật: càng ít thông tin được truyền tải qua lại giữa browser và client càng tốt, và càng ít thông tin được lưu trữ tại client càng tốt.


[Sưu tầm] từ internet
Post Reply