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

ThinkPHP Session 跨域解決方案:兩種場景全覆蓋

     編輯:PHP 綜合知識

核心原理

ThinkPHP 與原生 PHP 一樣,解決 Session 跨域關鍵在於設置 session.cookie_domain。根據項目是否啟用 URL 重寫(.htaccess),有兩種不同的配置位置。

場景一:未啟用 URL 重寫(無 .htaccess)

在 conf/config.php 第一行 添加:

ini_set('session.cookie_domain', '.domain.com'); // 跨域訪問 Session

缺點: 開啟調試模式可能生效,關閉調試後可能失效。

場景二:已啟用 URL 重寫(有 .htaccess)

在入口文件 index.php 第一行(<?php 之後)添加:

ini_set('session.cookie_domain', '.domain.com'); // 跨域訪問 Session

// 定義ThinkPHP框架路徑
define('THINK_PATH', '/ThinkPHP/');
// 定義項目名稱和路徑
define('APP_NAME', 'Www');
define('APP_PATH', '.');
// 加載框架入口文件
require(THINK_PATH.'/ThinkPHP.php');
// 實例化一個網站應用實例
App::run();

優勢: 無論是否開啟調試模式,均可穩定生效。

原理深度解析

  • .domain.com 開頭的點表示包含所有子域名(如 a.domain.com、b.domain.com)
  • Session ID 通過 Cookie 傳遞,Cookie 域設置正確才能跨子域共享
  • 入口文件最先執行,確保 Session 初始化前已設置 Cookie 域

常見誤區

  1. 在配置文件中設置但在重寫模式下失效 → 應移至 index.php
  2. 忘記加前導點 .domain.com 導致主域無法讀取子域 Cookie
  3. 未確保所有子域應用使用相同 Session 存儲(如共享 Memcached/Redis)

最佳實踐建議

  1. 統一在 index.php 頭部設置,兼容性最強
  2. 生產環境關閉調試模式後必須驗證跨域效果
  3. 多應用共享 Session 時,配置統一的 session.save_handler 與 session.save_path
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved