09/10/2018, 18:06

Help! Lỗi ngớ ngẩn trong PHP về Session

Tôi có một đoạn code đơn giản như sau.

Code:
 
<?php
session_start();
$snumber=22;
session_register("snumber");
if (session_is_registered("snumber"))
{
 echo "Registered: ". $snumber; 
}
else
{ 
 echo "Fail to register";
}
?>
Nhưng khi test thử trên localhost (và ngay cả trên host) thì bị lỗi sau:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:inetpubwwwroota.php:1) in c:inetpubwwwroota.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:inetpubwwwroota.php:1) in c:inetpubwwwroota.php on line 2
Registered: 22

Các bạn cho tôi biết nguyên nhân tại sao với. Thanks!
BnoL viết 20:13 ngày 09/10/2018
Source của bạn post lên nằm trong file nào ? a.php ?
ngtrannam viết 20:15 ngày 09/10/2018
Vâng, file a.php chỉ chứa mỗi đoạn code ấy thôi. Các bạn có thể giải thích cho tôi câu này không?

Cannot send session cookie - headers already sent by (output started at c:\inetpub\wwwroot\a.php:1)

Rất mong reply!
puppy viết 20:17 ngày 09/10/2018
Có thể bạn bị Dreamweave MX chèn ký tự unicode vào đầu file rồi. Bạn tạo một file php mới bằng notepad rồi gõ đoạn code trên vào thử được không
harry4me viết 20:14 ngày 09/10/2018
Bạn có thể khắc phục lỗi này bằng cách thêm dấu @ vào trước session_start() như vậy nè:
<?php
@session_start();
.......
?>
bpmtri viết 20:21 ngày 09/10/2018
Bạn kiểm tra xem trong file a.php chỗ <? có nằm ngay dòng đầu tiên, và kí tự đầu tiên không? Nếu không thì nó sẽ báo lỗi. (theo tôi nghĩa là bạn dư một dòng trống đầu tiên, trước <? )

Nguyên nhân nó báo lỗi là do session bạn dùng cookies để quản lý, và cookies này được gửi tới client bằng các "header" information. Và phần header này phải được gửi đi trước các phần còn lại của một HTTP request. Nói đơn giản là do trong trang của bạn có một dòng trắng đầu tiên nên khi dịch file a.php của bạn, PHP engine gửi luôn thông tin header đi rồi, do đó khi bạn dùng các hàm session sẽ không gửi thêm thông tin trong phần header đến client nữa.
nguyenthu viết 20:08 ngày 09/10/2018
Lý do chính là vì bạn cho nó chạy hơn 1 lần. Lần đầu tiên, nó register cái biến $snumber, lần thứ hai bạn đòi register lần nữa nhưng biến đó còn nằm trên Server cho nên nó báo lỗi ở dòng thứ hai (xem lại cookies, nó có setting về thời gian mà biến lưu lại trên Server).
Khi gặp trường hợp này, bạn hãy test nó :
if isset($snumber){... bạn register...}
Có lẽ là mình đã trả lời câu hỏi bạn cần.
ngtrannam viết 20:23 ngày 09/10/2018
Cám ơn các bạn đã trả lời! Tôi sẽ thử khắc phục ngay.

Reply Cont.

Sướng quá! Tôi đã khắc phục được rồi. Làm theo cách thêm @session_start(); thật đơn giản và hiệu quả.

Cảm ơn tất cả các bạn. Thế là tôi lại có thể tiếp tục rồi...
Bài liên quan
0