7

我在我的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');
        }
    }   
}
4

11 回答 11

11

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

session.autostart = On

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

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

session_start();

PHP: session_start - 手动

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

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

编辑1:

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

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

编辑2:

PHP 具有修改 HTTP 标头的函数。他们中有一些:

编辑 3:

换行符和空格可能是个问题,但也有一些不可见的字符序列可能导致Warning: Cannot modify header informationUTF -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",

您可以在 Preferences->Settings Default 中进行设置。如果您编辑您的用户设置 Preferences->Settings - User 并添加如下行:

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

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

编辑 7:

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

编辑 8:

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

于 2013-10-28T20:39:31.620 回答
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

于 2015-05-09T12:09:26.230 回答
2

确保在php.ini( xamp\php\php.ini) 中启用了会话 cookie。

session.use_cookies=1
于 2015-09-21T10:22:36.543 回答
1

在你的 php.ini 检查:

  1. variables_order包含字母S
  2. 检查它session.save_path存在并且可由运行 PHP 的用户写入。
于 2013-10-28T20:41:20.470 回答
1
  1. 打开php.ini
  2. 更改 session.auto_start 为"1"
  3. "Stop"Apache 如果运行
  4. "Save" php.ini
  5. "Start"阿帕奇
于 2020-03-04T07:34:35.667 回答
1

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

AddType application/x-httpd-php .html .htm

到该部分<IfModule mime_module>

于 2016-04-29T07:55:17.697 回答
1

我一直在与这个问题作斗争,但解决了......

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

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

为了这:

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

注意:也许您需要在/opt/lampp/var

于 2016-09-04T21:52:17.677 回答
0

请在 php ini 中检查您的“session.cookie_path”。默认为“session.cookie_path=/”

于 2021-01-07T11:50:52.307 回答
0
Session Issue Fixed in Xampp 7.1.6 with following Changes in php.ini
Line #1403 set: 
session.auto_start = 1    
于 2017-07-06T19:56:24.557 回答
0

我在现场工作 Xampp 时遇到了类似的问题。

在我的例子中,诀窍是禁用下面的两行。

header('Set-Cookie: same-site-cookie=huis; SameSite=Lax');
header('Set-Cookie: cross-site-cookie=stijl; SameSite=None; Secure');

因此,我的建议是检查任何修改有关 coockies的内容。

于 2019-12-18T10:42:45.353 回答
-1

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

改变

session.use_cookies=0

session.use_cookies=1

并记得重新启动 xampp

于 2017-07-25T14:36:03.577 回答