Session

2018-10-02 13:22:23
185

 

Session là một phiên dùng để lưu thông tình dùng qua nhiều trang khác nhau. Nó không giống như cookie , thông tin không được lưu trên máy người dùng

Phiên PHP là gì?

Khi bạn làm việc với một ứng dụng, bạn mở nó, thực hiện một số thay đổi, và sau đó bạn đóng nó lại. Điều này giống như một phiên. Máy tính biết bạn là ai. Nó biết khi bạn bắt đầu ứng dụng và khi bạn kết thúc. Nhưng trên internet có một vấn đề: máy chủ web không biết bạn là ai hoặc bạn làm gì, vì địa chỉ HTTP không duy trì trạng thái.

Các biến phiên giải quyết vấn đề này bằng cách lưu trữ thông tin người dùng được sử dụng trên nhiều trang (ví dụ: tên người dùng, màu yêu thích, v.v.). Theo mặc định, các biến phiên kéo dài cho đến khi người dùng đóng trình duyệt.

Vì thế; Biến phiên giữ thông tin về một người dùng duy nhất và có sẵn cho tất cả các trang trong một ứng dụng.

Bắt đầu một phiên PHP

Một phiên được bắt đầu với hàm session_start ().

Các biến phiên được đặt bằng biến toàn cục PHP: $ _SESSION.

Bây giờ, hãy tạo một trang mới có tên là "demo_session1.php". Trong trang này, chúng tôi bắt đầu một phiên PHP mới và thiết lập một số biến phiên:

<?php
session_start();
?>

Nhận giá trị biến phiên PHP.

Lưu ý rằng các biến phiên không được chuyển riêng lẻ đến từng trang mới, thay vào đó chúng được truy xuất từ ​​phiên mà chúng tôi mở ở đầu mỗi trang (session_start ()).

Cũng lưu ý rằng tất cả các giá trị biến phiên được lưu trữ trong biến toàn cầu $ _SESSION:

<?php

session_start();

echo "Favorite color is " . $_SESSION["ten"] . ".<br>";

?>

Phá hủy một phiên PHP

Để loại bỏ tất cả các biến session toàn cầu và hủy session, sử dụng session_unset () và session_destroy ():

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))
 
Session ứng dụng cho login, giỏ hàng ....
 
Địa chỉ đường dẫn của thư mục trên server chứa các tập tin session này có thể thay đổi được. Để hiển thị đường dẫn này bạn có thể sử dụng hàm session_save_path(). Bây giờ bạn hay di chuyển tới địa chỉ thư mục gốc của Apache và sử dụng code editor để tạo một file testsession.php với nội dung như sau:
<?php
echo session_save_path();
?>
Đường dẫn lưu mặc định : /var/lib/php/sessions
 

Cookie và Session
Như đề cập ở phần trước mỗi một file session trên server được dùng để lưu thông tin của một client (hay trình duyệt). Như vậy làm cách nào để server phân biệt được file session nào dành cho trình duyệt nào?

Hay nói cách khác làm sao để server có thể phân biệt giữa các trình duyệt khác nhau? Câu trả lời chính là server đã sử dụng dữ liệu lưu trong cookie của trình duyệt (hay đúng hơn là giá trị cookie trong request gửi tới server từ client).

Để hiểu điều này thì bạn hãy mở Developer tools (còn gọi là công cụ dành cho nhà phát triển) của trình duyệt bằng cách sử dụng tổ hợp phím F12, Command + Option + J nếu bạn trên Mac OS. Sau đó trên cửa sổ Developer tools di chuyển tới tab Application => Cookies => click chọn dòng đầu tiên với giá trị là địa chỉ URL của trang hiện tại trường hợp của bạn sẽ là http://localhost/testsession.php. Bạn sẽ thấy một bảng kết quả như sau:

 

Bảng kết quả này hiển thị danh sách thông tin các cookie của trang hiện được trình duyệt lưu lại. Trong đó cột đầu tiên Name là tên của cookie và cột thứ hai Value là giá trị tương ứng của cookie.

Khi bạn gọi hàm session_start() thì một cookie có tên là PHPSESSID được PHP tạo ra gửi trả về cho trình duyệt (và trình duyệt sẽ tự động lưu cookie này sau đó). Giá trị của cookie này chính là tên tập tin session mà PHP đã tạo ra khi xử lý request của trình duyệt gửi tới.

Điều này có nghĩa là trên server sẽ phải có một tập tin có tên tương ứng là 399smp098t8mu8iehcoivp2jn5 trên server (tên này có thể khác trên máy bạn tùy thuộc vào giá trị của cookie PHPSESSID)? Bạn đi tới địa chỉ đường dẫn lưu session trên sever và sẽ thấy một tập tin có tên sess_399smp098t8mu8iehcoivp2jn5 ( đây sess_ là prefix của tập tin để nhận biết tập tin này là PHP session).

Khi mở tập tin này bạn sẽ thấy nội dung như sau:
tkey_1|s:15:"Test value 10";

Nội dung của tập tin này chứa giá trị session  với cấu trúc được mã hóa (serialize).

Cảm nhận của bạn về bài viết: