Các biến $ _SESSION được lưu trữ ở đâu?


158

$_SESSIONcác biến được lưu trữ trên máy khách hoặc máy chủ?


trên máy chủ nơi bạn chạy ứng dụng php, để biết đường dẫn cụ thể, bạn phải kiểm tra với phpinfo ()
mật độ

Câu trả lời:


168

Vị trí $_SESSIONlưu trữ biến được xác định bởi session.save_pathcấu hình của PHP . Thông thường, đây là /tmptrê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 DocumentRootmiề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


129

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à PHPSESSIDtham số truy vấn mà bạn đôi khi thấy)


41
+1 vì bạn đã ngụ ý rằng cookie không lưu trữ nội dung của $ _SESSION (những nội dung này được lưu trữ trên máy chủ, do đó khách hàng không dễ bị sửa đổi)
shufler

12
Câu trả lời tuyệt vời! Tôi đã tìm kiếm câu hỏi: "Tại sao các phiên hết hạn sau khi xóa bộ nhớ cache của trình duyệt?". Và bạn đã cứu ngày của tôi.
Học sinh

2
máy chủ tạo file sess_7nu9p0fvidvva6ouaugqcc8292 аnd tình trạng báo động trình duyệt (getCookie ( 'PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb

2
Plus1 - Để trả lời câu hỏi: "... được lưu trữ trên máy khách hoặc máy chủ?"
Alex Vargas

22

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_handlerbiế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_pathbiến.


18

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.


13

Trên Debian (đây không phải là trường hợp của hầu hết các bản phân phối Linux?), Nó được lưu trong / var / lib / php5 /. Như đã đề cập ở trên, nó được cấu hình trong php.ini của bạn.


12

Tôi đang sử dụng Ubuntu và các phiên của tôi được lưu trữ trong / var / lib / php5.


1
Cảm ơn, đó là tất cả những gì tôi muốn. Vâng, nếu họ không ở vị trí thông thường, tôi sẽ cần mở các INI, nhưng tôi chỉ muốn biết "Này, các phiên thường được lưu trữ ở đâu?" / var / lib / php / session / nó là.
Eric L.

7

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ể.



0

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.


0

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 lstrong thư mục này chỉ có lsnó 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.