首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP session_start() 警告:Cannot send session cache limiter 解決方案

     編輯:PHP 相關知識

呼叫 session_start() 時出現 Warning: session_start(): Cannot send session cache limiter - headers already sent,是 PHP 開發常見問題。本文說明原因與多種解決方式。

根本原因

HTTP 協定要求 標頭必須在任何輸出內容之前發送。session_start() 需要送出 Set-Cookie 標頭,若在此之前已有輸出(包括:HTML 空白字元、echo、print、BOM 標記、錯誤訊息等),即會觸發警告並導致 Session 無法正常運作。

常見觸發情境

<html>
<?php
echo "輸出內容"; // 任何輸出
session_start(); // 錯誤:標頭已送出
?>

解決方法

  1. 將 session_start() 移至檔案最頂端,在任何 HTML、空白、輸出之前呼叫。
  2. 啟用輸出緩衝:在 php.ini 設定 output_buffering = On,或程式碼開頭加 ob_start()。
  3. 檢查檔案編碼:確保 PHP 檔案以 UTF-8 無 BOM 儲存,避免隱形 BOM 字元導致輸出。
  4. 避免 include/require 檔案有輸出:被引入檔案不得包含 HTML 或 echo。

最佳實踐

採用「單一進入點」架構,所有請求導向 index.php,由框架統一初始化 Session、資料庫連線等,徹底避免標頭衝突。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved