我在从 HTML 页面访问 php SESSION 数据时遇到了一个奇怪的问题。我有一个基本的 login.php,我将其重定向到“page1.html”。现在我已经这样配置了 .htaccess:
AddType application/x-httpd-php5 .html .htm
另外,我知道我的 PHP 代码可以在任何给定的 HTML 页面上运行。
但是,如果我输入:
session_start();
....
if(!isset($_SESSION['username'])){
header ("Location: http://blahblahblah/Login.html");
}
在 page1.html 的正文中,if 语句总是触发(事实上,var_dump($_SESSION) 产生“array(0) { }”
)。
但是,如果我采用相同的代码,将其放入“page1.php”,一切都会按预期工作(并且 var_dump($_SESSION) 会给出正确的值)。
那么,如果它的扩展名被重命名为 '.php'
,是不是不可能从 HTML 页面访问 $_SESSION
?或者我在这里做错了什么?我宁愿将我的大部分页面保留为 '.html'
而不是 '.php,'
因为返回并更改所有文件扩展名等。
非常感谢,
最佳答案
根据您的描述,PHP 运行正常(因为 if 语句正在触发)。
一些要检查的东西:
- 是否在 page1.html 中调用了
session_start()
?必须调用它来检索 session 数据并填充$_SESSION
super 全局。 - 是否在发送 header 之前调用了
session_start()
?在发送任何 HTML 或空格之前检查 session 是否已启动,否则 session cookie 将不会与 header 一起发送。 - Login.html 和 page1.html 是否在同一个域和同一个子域中?如果 session cookie 不可用,
$_SESSION
可能为空。如果您尝试跨域使用 session ,则可能会发生这种情况。 - 是否有 session cookie,是否正在发送?导航到 page1.html 时,使用 Firebog/Inspector 等进行检查以确保 session cookie 存在,并且它随页面请求一起传递。
$_SESSION
变量是如何设置的? page1.php 起作用可能只是巧合,因为当您第一次尝试访问 page1.html 时,$_SESSION
变量可能没有正确设置- Apache 是否有权写入 php.ini 中声明的
session.save_path
? session.save_path
是有效路径吗?
关于通过非 PHP 扩展访问时,PHP Session 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14301094/