Là $_SESSION
các biến được lưu trữ trên máy khách hoặc máy chủ?
Là $_SESSION
các biến được lưu trữ trên máy khách hoặc máy chủ?
Câu trả lời:
Vị trí $_SESSION
lưu trữ biến được xác định bởi session.save_path
cấu hình của PHP . Thông thường, đây là /tmp
trên một hệ thống Linux / Unix. Sử dụng phpinfo()
chức năng để xem các cài đặt cụ thể của bạn nếu không chắc chắn 100% bằng cách tạo một tệp có nội dung này trong DocumentRoot
miền của bạn:
<?php
phpinfo();
?>
Đây là liên kết đến tài liệu PHP về cài đặt cấu hình này:
http://php.net/manual/en/session.configuration.php#ini.session.save-path
Như đã đề cập, nội dung được lưu trữ tại máy chủ. Tuy nhiên, phiên được xác định bởi id phiên, được lưu trữ tại máy khách và gửi với mỗi yêu cầu. Thông thường id phiên được lưu trữ trong cookie, nhưng nó cũng có thể được thêm vào url. (Đó là PHPSESSID
tham số truy vấn mà bạn đôi khi thấy)
Chúng thường được lưu trữ trên máy chủ. Nơi họ được lưu trữ là tùy thuộc vào bạn là nhà phát triển. Bạn có thể sử dụng session.save_handler
biến cấu hình và session_set_save_handler
để kiểm soát cách các phiên được lưu trên máy chủ. Phương thức lưu mặc định là lưu phiên vào tệp. Nơi họ được lưu được kiểm soát bởi các session.save_path
biến.
Một bổ sung: Cần lưu ý rằng, trong trường hợp "/ tmp" là thư mục lưu trữ dữ liệu phiên (có vẻ là giá trị mặc định), các phiên sẽ không tồn tại sau khi khởi động lại máy chủ web đó, như "/ tmp "Thường bị thanh trừng trong quá trình khởi động lại. Khái niệm về tính bền vững của máy khách là tồn tại và tồn tại cùng với sự lưu trữ lâu bền trên máy chủ - có thể thất bại nếu thư mục "/ tmp" được sử dụng cho dữ liệu phiên.
Tôi đang sử dụng Ubuntu và các phiên của tôi được lưu trữ trong / var / lib / php5.
Như ông Taylor đã chỉ ra, điều này thường được đặt trong php.ini. Thông thường chúng được lưu trữ dưới dạng tập tin trong một thư mục cụ thể.
Đối với Ubuntu 16.10 là các phiên lưu trong / var / lib / php / session / ...
Làm thế nào nó hoạt động? Làm sao nó biết được tôi?
Hầu hết các phiên đều đặt khóa người dùng (được gọi là sessionid) trên máy tính của người dùng trông giống như thế này: 765487cf34ert8dede5a562e4f3a7e12. Sau đó, khi một phiên được mở trên một trang khác, nó sẽ quét máy tính để lấy khóa người dùng và chạy đến máy chủ để lấy các biến của bạn.
Nếu bạn xóa nhầm bộ đệm, thì khóa người dùng của bạn cũng sẽ bị xóa. Bạn sẽ không thể lấy biến của mình từ máy chủ nữa vì bạn không biết id của mình.
Trong các phiên máy Ubuntu của tôi được lưu trữ tại
/var/lib/php/sessions
và bạn phải sudo ls
trong thư mục này chỉ có ls
nó sẽ ném
ls: không thể mở thư mục '.': Quyền bị từ chối
Và trên các phiên php máy chủ Windows Wamp của tôi được lưu trữ trong
C:\wamp64\tmp
và nếu bạn cài đặt php độc lập trên windows thì không có giá trị nào được đặt theo mặc định
session.save_path => no value => no value
Nhiều câu trả lời ở trên là mờ đục. Theo tôi, tác giả của câu hỏi này chỉ muốn biết nơi các biến phiên được lưu trữ theo mặc định. Theo đó: https://canvas.seattlecentral.edu/cifts/937693/pages/10-advified-php-sairs chúng chỉ được lưu trữ trên máy chủ theo mặc định . Hy vọng, những người khác sẽ tìm thấy đóng góp này có ý nghĩa.