現象
ThinkPHP 3.1 專案在本地環境登入完全正常,SESSION 與 COOKIE 均能正確輸出,Runtime 目錄已清空,資料庫登入日誌也有寫入,但部署到服務器後無法登入。
根因分析
經排查,實際原因是資料庫用戶權限不足。服務器上的資料庫賬號缺乏對相關表的寫入/更新權限,導致登入過程中寫入 session 或更新用戶狀態失敗,但前端無明確報錯。
解決步驟
- 檢查服務器資料庫用戶權限:
GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.* TO 'user'@'%';
- 確認 `config.php` 中資料庫連線參數(主機、用戶、密碼、資料庫名)與服務器一致。
- 清理 `Runtime` 目錄下所有快取檔案,重新啟動服務。
- 若使用獨立 Session 存儲(如 Redis、Memcached),檢查連線配置與權限。
避坑指南
- 部署前務必在測試環境模擬生產資料庫權限。
- 開啟 ThinkPHP 調試模式(`APP_DEBUG => true`)可快速定位 SQL 錯誤。
- 檢查 `php.ini` 中 `session.save_path` 是否可寫。