07/08/2019, 22:14

"Đóng trình duyệt, session mất" hiểu thế nào cho đúng?

Mình đã nghe rất nhiều người nói "session sẽ mất khi đóng trình duyệt". Đặc biết là khi còn là sinh viên thì câu này là câu "thần chú" khi đi phỏng vấn. Vậy có phải khi đóng trình duyệt thật sự session sẽ mất không ? Và session còn mất trong các trường hợp nào nữa? Note: Bài ...

Mình đã nghe rất nhiều người nói "session sẽ mất khi đóng trình duyệt". Đặc biết là khi còn là sinh viên thì câu này là câu "thần chú" khi đi phỏng vấn. Vậy có phải khi đóng trình duyệt thật sự session sẽ mất không ? Và session còn mất trong các trường hợp nào nữa?

Note: Bài này mình dùng ngôn ngữ php và nginx nhé

Một session hay còn gọi là một phiên làm việc. Trong khoa học máy tính, Nó đơn giản là cách giao tiếp giữa client với server. Một session bắt đầu khi client gửi request đến sever, nó tồn tại xuyên suốt từ trang này đến trang khác trong ứng dụng và chỉ kết thúc khi hết thời gian timeout . Giá trị của session sẽ được lưu trong một tệp tin trên máy chủ.

Khái niệm session chắc không quá xa lạ nữa. Mình muốn làm dõ hơn nữa khái niệm này:

"Giá trị của session sẽ được lưu trong một tệp tin trên máy chủ"

Mình muốn biết tập tin đó lưu trữ nhưng gì và ở đâu ?

Mình sẽ tạo ra 1 session và lưu 1 số giá trị vào:

<?php
session_start();

$_SESSION["color"] = "red";
$_SESSION["color1"] = "yellow";

echo "Session is created";

Sau đó mở trình duyệt chrome để chạy. Vậy là mình đã tạo session thành công.

Thì mặc định session sẽ được lưu /var/lib/php/session nhé và chúng ta có thể thay đổi nơi lưu trữ session trong file php.ini

Mình thấy có file sess_qg2vvqet5ft791f4hgc49hcqr8 được tạo ra. thử mở ra xem có gì bên trong nào

Vậy là trong file lưu tên và giá trị mà chúng ta vừa set vào còn s:3 và s:6 là kiểu dữ liệu và độ dài (String độ dài 3 và String độ dài 6)

  • 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 gửi lại cho client 1 Session cookie (không phải session) 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).

Session cookie (không phải session) khác với cookie thông thường đó là khi đóng trình duyệt thì loại cookie này sẽ mất.

Vậy chúng ta tìm trên trình duyệt chrome xem cookie này như thế nào:

Đối với mỗi ngôn ngữ lập trình web sẽ có tên Session cookie quy định như php là PHPSESSID, jsp là JSESSIONID, …

Vậy PHPSESSID của trình duyệt này là qg2vvqet5ft791f4hgc49hcqr8 và nó match đúng với file vừa được tạo ra trên server.

Để làm dõ hơn thì mình mở bằng trình duyệt firefox

Sau khi chạy thì mình thấy trên server có tạo thêm 1 file sess_su7q6pskehc3nfqiu479p4oqvn

Và session cookie của trình duyệt firefox cũng match đúng với file đó.

Vậy dựa vào PHPSESSID đó mà server có thể phân biệt được session nào là của trình duyệt nào.

Là khoảng thời gian mà session tồn tại nếu không có request từ client đến server . mặc định là 24 phút .bạn cũng có thể thay đổi khoảng thời gian này phong file php.ini

Dựa vào những thứ tìm được từ bên trên mình sẽ đặt giả thiết thế này cho hình dung:

  • Tủ (session)             </div>
            
            <div class=
0