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

时间:2013-10-28 20:35:47

标签: php session localhost

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

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

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

不起作用的示例:

$_SESSION['user_id'] = $login;
echo '<META HTTP-EQUIV="refresh" content="0;URL=../home.php">';  

编辑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');
        }
    }   
}

11 个答案:

答案 0 :(得分:8)

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

session.autostart = On

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

确保已在PHP代码中设置:

session_start();

PHP: session_start - Manual

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

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

编辑1:

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

header("Location: /");
exit();

编辑2:

PHP具有修改HTTP标头的功能。其中一些:

编辑3:

换行符和空格可能是一个问题,但也有不可见的字符序列可能导致Warning: Cannot modify header information,如UTF-8 BOM (Byte-Order-Mark)。 尝试重新保存您的文件,确保其保存为UTF-8 (no BOM)

编辑4:

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

ini_set('display_errors', -1);

编辑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",

您可以在偏好设置 - >设置默认设置中进行设置。如果您编辑用户设置首选项 - &gt;设置 - 用户并按以下方式添加该行:

{
    "font_size": 10,
    "draw_white_space": "all"
}

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

编辑7:

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

编辑8:

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

答案 1 :(得分:4)

快速更新。我发现这个响应非常有用,但请注意,在我安装的XAMPP中,session.autostart = On的php.ini条目略有不同。我找到了以下内容:

在请求启动时初始化会话。 ; http://php.net/session.auto-start session.auto_start = 0

我将其更改为:

在请求启动时初始化会话。 ; http://php.net/session.auto-start session.auto_start = 1

答案 2 :(得分:2)

确保在php.inixamp\php\php.ini)中启用会话Cookie。

session.use_cookies=1

答案 3 :(得分:1)

在你的php.ini检查中:

  1. variables_order包含字母S
  2. 检查session.save_path是否存在且可由运行PHP的用户编写。

答案 4 :(得分:1)

如果您使用嵌入.htm / .html文档中的PHP,则需要确保Apache可以正确处理它们。这是通过编辑httpd.conf并添加行

来完成的
AddType application/x-httpd-php .html .htm

<IfModule mime_module>

部分

答案 5 :(得分:1)

我正在解决这个问题,但要解决......

/opt/lampp/etc/php.ini尝试更改此行:

session.save_path = "/var/lib/php/session"

为此:

session.save_path = "/opt/lampp/var/session"

注意:您可能需要在/opt/lampp/var

中创建“会话”文件夹

答案 6 :(得分:0)

Session Issue Fixed in Xampp 7.1.6 with following Changes in php.ini
Line #1403 set: 
session.auto_start = 1    

答案 7 :(得分:0)

在php.ini中启用会话cookie(C:\ xamp \ php \ php.ini)。

CHANGE

session.use_cookies=0

TO

session.use_cookies=1

并记得重启xampp

答案 8 :(得分:0)

我在使用Xampp的实时站点中遇到类似的问题。

在我的案例中,技巧是禁用以下两行。

  ="Photograph indicates the entrance elevation of "&Frontsheet!D27&"."

因此,我建议您检查关于鸡冠的一些修改

答案 9 :(得分:0)

  1. 打开php.ini
  2. 使用"1"更改session.auto_start
  3. "Stop" Apache(如果正在运行)
  4. Save" php.ini
  5. "Start" Apache

答案 10 :(得分:0)

请检查您在 php ini 中的“session.cookie_path”。默认情况下它是“session.cookie_path=/”