根本原因是session cookie的domain和path冲突:october cms默认domain为空、path为/,导致localhost下所有端口共享同一cookie,登录一个站点后访问另一端口会覆盖october_session,返回时因id失效而登出。

为什么October CMS在多端口下会互相登出
根本原因是 session cookie 的 domain 和 path 冲突。October CMS 默认使用 session.cookie_domain 为空、session.cookie_path 为 /,导致所有 localhost 下的端口(:80、:8080、:8081)共享同一份 session cookie。登录 website1 后写入 october_session,再访问 website2 时覆盖了同名 cookie,返回 website1 就因 session ID 失效而登出。
- 不是 October 独有问题,Laravel 底层 session 机制决定的
- 改用不同域名(如
site1.test/site2.test)可天然隔离,但多端口方案下必须手动干预 cookie 行为 - 不能只靠 Apache 虚拟主机配置解决,PHP 层必须配合
必须修改 config/app.php 中的 session 配置
每个 October CMS 项目需单独设置 session.cookie_domain 和 session.cookie_path,让 cookie 绑定到具体端口。Windows/macOS 下直接编辑项目根目录的 config/app.php:
'session' => [
'driver' => 'file',
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'cookie' => 'october_session',
'path' => '/',
'domain' => '.localhost:8080', // ← 关键:加点号前缀 + 明确端口(Apache 不传端口给 PHP,此处仅作标识)
'secure' => false,
'http_only' => true,
'same_site' => 'lax',
],
-
domain填.localhost:8080是常见误区 —— 浏览器实际不支持带端口号的 domain 值,该字段会被忽略;真正起作用的是path配合 URL 路径隔离 - 更可靠的做法是把每个站点放在独立子路径下(如
http://localhost/october1),并设'path' => '/october1',但这就不是“多端口”而是“多子目录”了 - 所以务实解法:放弃端口隔离 session,改用不同 host + hosts 映射(如
oct1.test/oct2.test),这才是 Apache + October 的稳定组合
Apache 多端口配置本身要避开几个硬坑
即使 session 问题解决了,XAMPP 的多端口部署仍容易卡在 Apache 启动或 403 错误上:
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
-
Listen 8080必须出现在httpd.conf的Listen 80之后,且不能重复;Windows 下 1024 以下端口需管理员权限,建议全用 8000+(如 8080、8081、8090) -
httpd-vhosts.conf中每个<virtualhost></virtualhost>块内,ServerName必须和系统hosts文件里写的完全一致(例如写ServerName oct1.test,hosts 就得有127.0.0.1 oct1.test),否则请求会落到第一个虚拟主机 - Windows 上改完
hosts后,Chrome/Firefox 可能缓存 DNS,需清空浏览器 DNS 缓存或用无痕窗口测试;Edge 有时还要运行ipconfig /flushdns - 务必确认
httpd.conf中#Include conf/extra/httpd-vhosts.conf这行已取消注释,否则所有httpd-vhosts.conf配置都不生效
October CMS 项目目录权限与 .htaccess 冲突
XAMPP 默认禁用 .htaccess 覆盖,而 October 依赖它做路由重写。若多端口站点打开后显示 404 或白屏,大概率是 Apache 拒绝读取 .htaccess:
- 检查
httpd-vhosts.conf对应<directory></directory>块中是否有AllowOverride All(不是None) - Windows 下路径分隔符统一用正斜杠
/或双反斜杠\,避免单反斜杠被转义(如C:/xampp/htdocs/oct1安全,C: mpphtdocsoct1可能报错) - October 的
storage和bootstrap/cache目录需 Apache 用户(通常是daemon或SYSTEM)有写权限;XAMPP 控制面板右键 Apache → “Explorer” 可快速定位目录 - 若用 XAMPP 8.0+(含 PHP 8.x),确认 October 版本兼容性 —— 旧版 October(v1.x)在 PHP 8.1+ 会因
create_function()等废弃函数报错,需升级到 v2 或打补丁
多端口本质是权宜之计,真正稳定的本地多站点方案永远是「不同域名 + hosts 映射 + 单端口(80/443)」。端口数字只是表象,session、cookie、rewrite、权限这些底层环节一旦错一个,整个链路就断在看不见的地方。










