.htaccess文件破坏了我的SESSION变量

时间:2017-01-02 18:10:20

标签: php apache .htaccess session

我正在使用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>

1 个答案:

答案 0 :(得分:1)

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

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

  

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

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