使用XAMPP设置$ _SESSION不适用于localhost

Jos*_*son 7 php session localhost

我在我的PHP代码中设置了这样的会话:$_SESSION['user_id'] = $login;这似乎工作正常,同时上传到我的服务器并进行不同的页面,但是当我在我的本地机器上测试网站时,会话似乎在离开脚本后立即被取消在哪里设置.

我正在使用XAMPP和完全相同的代码在我的本地机器上进行测试.

我不确定为什么会出现这个问题,并且非常感谢任何有用的答案.

无效的示例:

$_SESSION['user_id'] = $login;
echo '<META HTTP-EQUIV="refresh" content="0;URL=../home.php">';  
Run Code Online (Sandbox Code Playgroud)

编辑1:

这是我登录的整个函数(它是类的一部分):

public function loggingIn(){
    session_start();

    $db = new Database('localhost','root','','userdata');
    $userFunctions = new Users($db);

    $username = $_POST['usernameInput'];
    $password = $_POST['passwordInput'];

    if(empty($username) || empty($password)){
        $this->errors['u&p'] = 'Please Enter Your Username AND Password';
        $this->printE();
    } elseif($userFunctions->user_exists($username)===false){
        $this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
        $this->printE();
    } else {
            $login = $userFunctions->login($username, $password);

    if($login === false){
            $this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
            echo 'Login Failed!';
        } else  {
           if(!$userFunctions->economyTableExistsForUser($login)){
               $userFunctions->createEconomyTableForUser($login);   
           }
           if(!$userFunctions->schoolTableExistsForUser($login)) {
               $userFunctions->createSchoolTableForUser($login);    
           }

               $_SESSION['user_id'] = $login;

               echo $_SESSION['user_id'];  // working fine

               header('Location: ../home.php');
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

Ili*_*sev 9

我们猜测你的家用机器没有:

session.autostart = On

在你的php.ini中,而你的另一台机器显然是.

确保您已在PHP代码中设置:

session_start();

PHP:session_start - 手动

如果你不这样做,那么你的会话就不会开始,除非我的第一个推测是真的.

此外,您必须在localhost上检查PHP版本并在php.ini中设置.确保存储会话文件的目录是可写的,并且会话文件确实存在.

编辑1:

您最好使用PHP解决方案进行重定向:

header("Location: /");
exit();
Run Code Online (Sandbox Code Playgroud)

编辑2:

PHP具有修改HTTP标头的功能.他们中有一些:

编辑3:

换行符和空格可能是个问题,但也有不可见的字符序列Warning: Cannot modify header information,如UTF-8 BOM(字节顺序标记).尝试重新保存您的文件,确保它保存为UTF-8 (no BOM).

编辑4:

要正确调试代码,请确保PHP显示所有警告和通知.在会话开始之前运行它:

ini_set('display_errors', -1);
Run Code Online (Sandbox Code Playgroud)

编辑5:

您还必须检查session.gc_maxlifetime设置:

session.gc_maxlifetime
session.gc_maxlifetime指定数据被视为"垃圾"并清理的秒数.在会话开始期间发生垃圾收集.

编辑6:

要在Sublime Text中查看空格,请编辑设置:

// Set to "none" to turn off drawing white space, "selection" to draw only the
// white space within the selection, and "all" to draw all white space
"draw_white_space": "selection",
Run Code Online (Sandbox Code Playgroud)

您可以在Preferences-> Settings Default中进行设置.如果您编辑用户设置首选项 - >设置 - 用户并按以下方式添加行:

{
    "font_size": 10,
    "draw_white_space": "all"
}
Run Code Online (Sandbox Code Playgroud)

还要确保它显示所有其他特殊字符以正确调试代码!

编辑7:

最后session_write_close();在重定向之前尝试添加.

编辑8:

在您的PHP文件中设置,之前session_start();,session.save_path = "/home/username/tmp";指令.tmppublic_html之外创建dir .确保tmpdir具有chmod 770并使用相同的用户/组权限创建.ls -lsa在你的主目录中运行,检查新目录是否与其他目录具有相同的用户/组,例如public_html.如果没有,请确保tmp通过运行以root身份更改权限chown username:groupname /home/username/tmp.