Tại sao tôi có thể sử dụng setcookie
mà không cần chuẩn bị khi cần session_start()
trước khi sử dụng $_SESSION
? Và tôi nghĩ rằng các công trình họ làm tương tự.Tại sao session_start là cần thiết khi sử dụng phiên?
Trả lời
Vì setcookie()xác định cookie sẽ được gửi cùng với phần còn lại của tiêu đề HTTP. Đó là một điều hoàn toàn khác với những gì session_start() thực hiện, ví dụ: tạo phiên hoặc tiếp tục phiên hiện tại dựa trên số nhận dạng phiên được chuyển qua yêu cầu GET hoặc POST hoặc được chuyển qua cookie.
Đầu tiên chỉ cần thêm một cái gì đó để header và gửi nó - trình duyệt, trong khi người kia đi lấy Session ID từ $ _COOKIEs hoặc _GET $ hoặc $ _POST và sau đó cố gắng tìm kiếm các tập tin phiên trong session_save_path và khi tìm thấy unserializing các giá trị của nó vào $ _SESSION và nếu không, tạo một phiên mới, có thể sử dụng setcookie
trong quá trình để đặt Id phiên.
Xem chapter on Sessions in the PHP Manual.
Sửa Giống như @Felix một cách chính xác chỉ ra dưới đây, phiên không nhất thiết phải được lưu trong một tập tin. Mặc dù vậy, điều này không quan trọng, bởi vì đối số vẫn giữ nguyên: session_start
sẽ tìm và (lại) khởi tạo dữ liệu phiên của bạn, trong khi setcookie
chỉ cần thực hiện ý nghĩa của tên.
Để được giải thích, hãy xem câu trả lời trước tôi. Nếu bạn không muốn gọi hàm start_session() có một cái nhìn tại thiết lập này trong php.ini: session.auto_start
Dữ liệu phiên không nhất thiết được lưu trữ trong một tệp như Gordon nói. Với session_set_save_handler()
bạn có thể xác định chương trình phụ trợ của riêng bạn sẽ lưu trữ các giá trị, ví dụ: trong cơ sở dữ liệu.
Tất cả việc truy xuất dữ liệu này được xử lý bằng session_start()
. Bằng cách này, bạn có thể dễ dàng thay đổi chương trình phụ trợ mà không cần phá vỡ ứng dụng của mình.
Lưu ý: Đây chỉ là một lý do cho session_start()
và một lần nữa nó hoạt động nhiều hơn sau đó chỉ cần đặt cookie.
Dữ liệu phiên không nhất thiết được lưu trữ trong một tệp như Gordon nói. Với session_set_save_handler()
, bạn có thể xác định đầu cuối của riêng mình để lưu trữ các giá trị, ví dụ: trong cơ sở dữ liệu.
Tất cả việc truy xuất dữ liệu này được xử lý bằng session_start()
. Bằng cách này bạn có thể dễ dàng thay đổi bạn kết thúc mà không vi phạm ứng dụng của bạn.
Lưu ý: Đây chỉ là một lý do cho session_start()
và một lần nữa nó hoạt động nhiều hơn sau đó chỉ cần đặt cookie.
- 1. Tại sao session_ destroy() là cần thiết?
- 2. Tải session_start() chỉ khi phiên không tồn tại?
- 3. SwingUtilities.invokeLater() tại sao cần thiết?
- 4. Truyền tới nút là không cần thiết - Tại sao?
- 5. Tại sao tôi cần sử dụng ngắt?
- 6. Tại sao nút lưu cần thiết?
- 7. Tại sao typeof lại cần thiết?
- 8. PHP session_start()
- 9. Tại sao cờ - nhánh mới cần thiết?
- 10. phiên bản java gì là cần thiết cho JUnit 4,8
- 11. Khi nào tôi phải khai báo session_start() ;?
- 12. Chờ() cần thiết sau khi sử dụng Task.Factory.StartNew()?
- 13. PHP Lưu phiên khi sử dụng session_write_close();
- 14. Có cần thiết để sử dụng Process.WaitForExit sau khi Process.Kill?
- 15. Tại sao từ khóa mới không cần thiết cho Chuỗi
- 16. session_start có vẻ rất chậm (nhưng đôi khi chỉ)
- 17. Tại sao chức năng Matlab "feval" lại cần thiết?
- 18. Tại sao RedirectStandardOutput không có mã ANSI cần thiết?
- 19. Tại sao HttpContext.Current.Session là null trong Global.asax?
- 20. gán tham chiếu là nguyên tử vậy tại sao Interlocked.Exchange (đối tượng ref, Object) cần thiết?
- 21. ? Php session_start được treo
- 22. Giao thức TDS phiên bản 8.0 là gì và tại sao tôi nên sử dụng nó?
- 23. Tại sao chúng ta cần sử dụng cơ số?
- 24. Khi nào là từ khóa "tên tệp" cần thiết?
- 25. Nhà phân bổ là gì và khi nào thì việc sử dụng chúng cần thiết?
- 26. Là "trả lại;" cần thiết/hữu ích khi sử dụng callbacks trong Node.JS?
- 27. Khi nào và tại sao sử dụng malloc?
- 28. Tại sao chú thích kiểu này trong Haskell cần thiết?
- 29. pytz: Tại sao bình thường hóa cần thiết khi chuyển đổi giữa các múi giờ?
- 30. Tại sao Android phân bổ bộ nhớ nhiều hơn mức cần thiết khi tải hình ảnh
Tôi đã nhận được nó. Cảm ơn các câu trả lời có chất lượng. – Young