通过非 PHP 扩展访问时,PHP Session 不起作用

标签 php html .htaccess session session-variables

我在从 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/

相关文章:

php - MySQL 没有一致地更新行?

php - 使用 PHP 检查远程页面是否存在?

javascript - 使用多级对象在 javascript 中发布请求

php - PHP 中缺少 $_SERVER header ,但 Python 中存在 $_SERVER header

.htaccess - 重新设计网站 (SEO) 后出现多个 301 重定向

html - 我们如何使用伪元素实现类似列表的行为

javascript - 为什么通常使用标签 <UL> 和 <LI> 创建工具栏?

javascript - 如果我知道页面数,如何在 AngularJS 中创建页面项?

.htaccess - 使用 htaccess 将页面从一个页面重定向到另一个页面而不更改 url

.htaccess - 如果参数等于某项,mod_rewrite 拒绝访问