【发布时间】:2015-07-15 06:32:12
【问题描述】:
我已经为此苦苦挣扎了 2 天。
下面的代码在我的本地主机(WampServer Version 2.5, Apache v2.4.9, PHP 5.5.12) 上完美运行,但在我的主机服务器上却不行。
在注册新用户期间,我试图将$_SESSION 从一个页面传递到另一个页面(两个文件都在同一个文件夹下。)。
page 1:(stepOne.php)
分配$_SESSION['userid']:
<?php
session_start();
include_once (dirname(__FILE__) .'/classes/data.php');
$_SESSION['userID'] = $user->id; /*user->id is set.*/
?>
第 2 页:(steps.php)
<?php
session_start();
include_once (dirname(__FILE__) .'/classes/data.php');
$data = new data();
error_log("session at start=".print_r($_SESSION,true));
?>
结果是:
[14-Jul-2015 23:31:40 America/Denver] session at start=Array
(
)
已检查:
1.session_start() 在每一页上`。
2.sessions are 已启用。
3.session.save_handler = files on php.ini
4.session.save_path = "/tmp" - I've created "tmp" folder
我在“tmp”文件夹下也找不到会话文件。 希望有任何建议和答案
15/7/15 更新 - 已解决 在与我的主机服务器核对后,找出几件事:
- 有一个 .htaccess 显然指向不同的 php.ini,然后是我想要的那个
- 在这个 .htaccess 中有一个重定向页面的规则导致 $_SESSION 重置。
所以, 我从中学到了什么:
- 始终检查您是否指向正确的 php.ini
- 在您的所有文件夹中搜索 .htaccess - 可能有一个旧文件夹会弄乱配置。
【问题讨论】:
-
你能不能把
include_once (dirname(__FILE__) .'/classes/data.php');转成include_once ('classes/data.php');再试一次。这可能是您获取的目录可能不同,并且它可能不会显示错误,因为您可能已关闭错误。 -
确保 tmp 目录对运行 Web 服务器的用户是可写的,并确保 tmp 目录位于文件系统的根目录(或将 session.save_path 中的 /tmp 更改为tmp 目录所在位置的完整绝对路径),这可能是这里的问题。还要检查您的网络服务器上的错误日志,以获取有关正在发生的事情的任何提示。
-
@PratikSoni,试过了,我得到“无法打开流”,这就是我包含的方式 (dirname(FILE)..
-
@Orangepill 将根 /tmp 修改为 0777(仅用于测试)并更改为 php.ini 中的完整路径 - 仍然无法正常工作。
-
会话文件是否正在临时目录中创建?还要确保 url 中的主机名在调用之间没有改变。做一个 phpinfo 页面以确保您的网络服务器正在接收您的 ini 更改可能是个好主意。