【问题标题】:.htaccess file ruined my SESSION variables.htaccess 文件毁了我的 SESSION 变量
【发布时间】:2017-05-16 19:59:12
【问题描述】:

我正在使用 WAMP 构建一个 Web 应用程序。我需要使用 .htaccess 文件,所以我只是在记事本中创建了一个文件并将其保存为 .htaccess。从那时起,一些登录会话变量不再传递给其他 PHP 页面。我决定完全删除 .htaccess 文件,但它并没有回滚。

当前状态是通过登录进程启动会话后,我无法在其他 PHP 文件中使用会话数组。有些不对劲。有什么想法吗?

每次登录尝试后:

<?php
session_start();
require 'core/database/connect.php';
require 'core/functions/clients.php';
$errors = array();

?>

调用会话变量:

<div class="nav_wrapper">
    <div class="container navbar_container ">
        <ul class="navbar">
            <li><a href="Home.html">Home</a></li>
            <li><a href="AboutUs.html">About</a></li>
            <li><a href="products.html">Products</a></li>
            <li><a href="events.html">Events</a></li>
        </ul>

        <?php
        if (isset($_SESSION['email'])) {
            include 'includes/loggedin.php';
            echo $_SESSION['email'];
        } else {
            include 'includes/notloggedin.php';
            echo $_SESSION['email'];
        }

        ?>

    </div>
</div>

【问题讨论】:

  • 如果不知道 .htaccess 和 PHP 文件中的内容,很难提供帮助。而且我真诚地怀疑您正在使用 phpMyAdmin 构建 Web 应用程序。那是一个数据库管理工具,而不是一种编程语言或另一个应用程序的一部分。另外,你确定你在每个请求中调用了session_start()吗?
  • 当然我在编码 php.. 我只是觉得值得一提。无论如何,.htacess 包含“ן»¿AddType application/x-http-php .css .js”但被删除了。我在每次登录时调用 session_start,我不会在每个页面中调用它,否则我会收到“会话已经开始”错误。编辑:我很菜鸟,这是我的第一个项目。
  • 既然你承认自己是个n00b,我建议你慢慢来,一步一个脚印。例如,您说“.htaccess 包括...但已被删除”。这是一件非常奇怪的事情。我建议你弄清楚它是如何被删除的。此外,缺少的行表明您的 JavaScript 和 CSS 文件将提供给 PHP 解释器(至少我是这么读的)。这也有些奇怪。这个想法/代码从何而来?
  • 谢谢彼得。首先,“被删除”是指我删除了文件。其次,htaccess 的内容来自我老师的指导:D

标签: php apache .htaccess session


【解决方案1】:

基于your comment,您的问题不在您的.htaccess 中。您的问题是您没有正确开始和恢复会话。

您需要在每个请求中调用session_start()一次 - 并且只需要一次 - 而不仅仅是在登录期间。来自the manual

session_start() 基于通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话

为了避免多次调用它,您通常会安排您的应用程序,以便您拥有一个“前端控制器”——一个页面,通常是 index.php,它处理所有请求或至少包含在每个请求中。您可以将 session_start() 放置在该文件中,并且只放置在该文件中,这样可以确保它被调用一次,但可以防止它在请求期间被多次调用。

【讨论】:

  • 假设我在 Authentication.php 中启动了一个会话,该会话在用户登录时启动。现在在主页中我想添加“欢迎”用户名“”。它显然是一个不同的php。该页面可以使用 $_SESSION['username'] 变量吗?
  • @Johnny 是的。会话变量可以跨 PHP 文件和请求工作,但是您必须在每个请求上调用 session_start()。此外,您会指“一个 PHP 文件”或“一个 PHP 脚本”,而不是“一个 PHP”。
  • 谢谢埃德。我问它是因为这正是我所做的并且它有效(看看我的帖子的代码块)。在我弄乱了 .htaccess 文件之后,事情发生了变化。它不再进入 login.php 脚本,当我测试和回显 $_Session 变量时,我什么也没得到。
  • @Johnny 同样,您必须在每个请求上调用session_start(),而不仅仅是在登录时。您发布的代码没有表明您正在这样做。这就是导致您的问题的原因。
  • 谢谢,我知道每次我想访问它的变量时都必须启动会话。它现在正在工作。我感谢您的帮助!我也为误导性的帖子和标题道歉。
猜你喜欢
  • 2017-07-27
  • 2011-06-25
  • 2021-06-27
  • 2013-01-12
  • 2015-03-01
  • 1970-01-01
  • 2014-09-15
  • 2012-12-18
  • 2011-10-19
相关资源
最近更新 更多