首页 > 解决方案 > PHP session_start 返回 false,$_SESSION 变量不是持久的

问题描述

让我首先说我对 PHP 比较陌生,如果这看起来微不足道,请道歉。另外,如果已经回答了类似的情况,我们深表歉意,但我似乎无法通过浏览类似的问题找到任何对我有用的解决方案。

我正在尝试为我的网站设置一个登录页面,我的目标是在用户登录后使用 $_SESSION 变量来存储用户登录凭据。但是,我找不到让 $_SESSION 变量持续存在的方法到其他页面,甚至在网页刷新时停留。

应当指出的是:

每当我尝试调用 session_start() 时,它总是返回 false。我在我的 php 代码的最开始调用它,在它之前没有任何空格。

每当我调用 session_status 时,它总是返回 1。无论在 php 代码中的何处调用它,都会发生这种情况。

每当我调用 session_id 时,它总是返回 null。同样,无论在 php 代码中的何处调用它,都会发生这种情况。

该代码正在 SiteGround 的网络托管服务上运行。我没有在本地测试它,因为我对 php 比较陌生,而且我对如何在本地托管 php 文件不太有信心。

我已经对此进行了测试;我的 Windows PC 使用 chrome,我的 iPhone 使用 Safari。两者都有相同的问题。

任何帮助或建议都将不胜感激,因为在过去的几天里,这些看起来相当微不足道的事情让我发疯了。

编辑

以下代码是我用来测试问题的代码。

<?php
if (session_start())
{
    echo '<script>console.log("YES"); </script>';
} else {
    echo '<script>console.log("NO"); </script>';
}

$_SESSION["test"] = "YEET";
echo '<script>console.log("'.$_SESSION["test"].'"); </script>'; // prints YEET
?>


<?php
session_start();
if (isset($_SESSION['test']))
{
    echo '<script>console.log("'.$_SESSION["test"].'"); </script>';
} else {
    echo '<script>console.log("NEET"); </script>';
}
?>

标签: phphtmlsessionsession-cookiessession-variables

解决方案


更新:我找到了解决方案。

即使 SiteGround(我的主机)已将 session.save_path 设置为 /tmp,我仍然必须使用此文件路径编写自定义 php.ini 文件。这已经解决了这个问题,并且一旦我将 php.ini 文件设置为同时显示错误和启动错误,就清楚地表明 session.save_path 是问题所在。


推荐阅读