có một mẹo ngắn để kiểm tra xem phiên đã bắt đầu chưa và sau đó tải một phiên không? Hiện tại tôi nhận được lỗi "phiên đã bắt đầu ..." nếu tôi đặt trong phiên bắt đầu bất kể kiểm tra.Tải session_start() chỉ khi phiên không tồn tại?
Trả lời
isset
thường là cách thích hợp để kiểm tra xem biến xác định trước hiện đang định nghĩa:
Nếu bạn đang sử dụng một phiên bản của php trước 5.4,
bạn thường có thể nhận được ngay với và hấp dẫn của nó chỉ cần làm mã bên dưới, nhưng lưu ý rằng nếu một số phiên lý do bị vô hiệu hóa, session_start() sẽ vẫn được gọi có thể dẫn đến lỗi và không cần gỡ lỗi vì mảng $ _SESSION không được phép tạo.
if(!isset($_SESSION)){session_start();}
nếu bạn muốn kiểm tra xem liệu phiên có bị vô hiệu vì lý do nào không, bạn có thể tắt thông báo lỗi, đặt biến phiên thử nghiệm, sau đó xác minh biến được đặt. Nếu không, bạn có thể mã hóa phản ứng cho các phiên bị vô hiệu hóa. Bạn sẽ muốn làm tất cả điều này tại hoặc gần đầu của kịch bản của bạn. Vì vậy, như một ví dụ (các công trình khác nhau tùy thuộc vào thiết lập xử lý lỗi):
if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
//handle disabled sessions
}
Tuy nhiên, nếu bạn đang sử dụng php phiên bản 5.4 hoặc cao hơn,
Bạn có thể sử dụng session_status() chức năng, một lựa chọn tốt hơn như nó chiếm các phiên bị vô hiệu hóa và kiểm tra xem phiên đã tồn tại chưa.
if (session_status() === PHP_SESSION_NONE){session_start();}
Chú ý rằng PHP_SESSION_NONE là một tập hợp liên tục bằng PHP và do đó không cần phải được bao bọc trong dấu ngoặc kép. Nó đánh giá đến số nguyên 1, nhưng như là một hằng số được thiết lập đặc biệt để loại bỏ sự cần thiết của các số ma thuật, tốt nhất để kiểm tra so với hằng số.
Nhiều người chỉ cần sử dụng @session_start()
để chặn cảnh báo rằng phiên đã bắt đầu. Giải pháp thay thế thường là:
if (session_status() === PHP_SESSION_NONE) session_start();
if (session_id() === "") { session_start(); }
thử tình trạng này
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
Nếu bạn chỉ muốn tránh lỗi này, sử dụng @ trước khi chức năng dụ:
@session_start();
Xin chào, chào mừng đến với SO. Bạn có thể vui lòng chỉnh sửa bài đăng của mình để giải thích mã của bạn hoạt động không và cách giải quyết vấn đề của OP? Các câu trả lời chỉ có mã không được khuyến khích và có thể bị xóa. –
Kiểm tra cho phiên hiện tại trước khi bắt đầu mới:
// # if phpversion() is >= 5.4
if(phpversion() >= 5.4) {
// # check session_status() function for value 'PHP_SESSION_NONE'
if(session_status() === PHP_SESSION_NONE) {
session_start();
}
} else { // # maintain backwards compat. with PHP versions older than 5.4
// # if $_SESSION object if NOT set, start a new session!
if(!isset($_SESSION)) {
session_start();
}
}
- 1. Tại sao session_start là cần thiết khi sử dụng phiên?
- 2. session_start có vẻ rất chậm (nhưng đôi khi chỉ)
- 3. Node.js - Phiên không tồn tại qua res.redirect()
- 4. PHP session_start()
- 5. Lỗi khi cố tải cấu trúc bằng db rake: cấu trúc: tải, "schema_migration" không tồn tại
- 6. PHP session_start không thành công
- 7. Khi nào tôi phải khai báo session_start() ;?
- 8. Chỉ mkdir nếu nó không tồn tại
- 9. Codeigniter & PHP kiểm tra xem phiên có tồn tại
- 10. ? Php session_start được treo
- 11. Thư viện phiên âm .NET có tồn tại không?
- 12. Kiểm tra xem phiên có tồn tại không JSF
- 13. cành: biến hiển thị chỉ khi nó tồn tại
- 14. C# Không thể kiểm tra Phiên tồn tại?
- 15. lỗi shutil.copy khi đích đã tồn tại và chỉ đọc
- 16. Phát hiện nếu phiên PHP tồn tại
- 17. Tại sao MySQL Innodb "Tạo chỉ mục sắp xếp" khi chỉ mục duy nhất tồn tại?
- 18. Symfony2: kiểm tra xem phiên có tồn tại hay không
- 19. Đặt không nếu chỉ mục mảng numpy không tồn tại
- 20. HttpHandler chỉ cháy nếu tập tin không tồn tại
- 21. Tải phiên bản .NET CLR hiện tại khi đang chạy?
- 22. amazon s3 Chìa khóa được chỉ định không tồn tại sau khi thành công get_key
- 23. System.Web.HttpException File không tồn tại - Trang tải tốt (ASP.NET)
- 24. SQLite xóa từ chỉ khi bảng tồn
- 25. Sự kiện ASP.Net Session_Start không kích hoạt
- 26. Khi nào cần gọi ReleaseDesignerOutlets khi ViewDidUnload không tồn tại
- 27. System.Windows.Input không tồn tại?
- 28. div của tôi không tồn tại sau khi tải điểm ảnh của tôi
- 29. HSQL: Tạo chỉ số nếu không tồn tại
- 30. Chỉ tạo một tệp nếu không tồn tại
cảm ơn vì đã đề cập đến một giải pháp cho php <5.4 – Houston
@ tốt, tôi muốn nói rằng bạn đã tìm thấy lỗi trong 5.4.16 hoặc nhiều khả năng có cấu hình máy chủ/php lạ. Dù bằng cách nào nó tốt để kbow trường hợp có thể cạnh của họ: D – Rooster