PHP 会话在网站上不起作用

PHP Session Does Not Work on Website

我创建了一个 php 会话,它在我的本地主机服务器上与 XAMPP 一起工作,但是当我把它放在我的网站上时它不起作用。我做了一个更简单的,看看它能不能用,但还是不行。

login_validation.php

<?php 
session_start();

$user = $_POST['user'];

if ($user == (--database match--)) { #<== Just to skip all the mysql database stuff that already works.

    $_SESSION['username'] = $user;

    if (isset($_SESSION['username'])) {
        echo "Logged in, " . $_SESSION['username'] . "<a href='test.php'>Return</a>";
    }
}

?>

此页面在我的站点和本地主机上均有效。在网站上,它打印了给定的用户名,表明会话已保存。所以我制作了一个名为 test.php 的空白页,看看它是否会在实际设置的情况下打印会话。

test.php

<?php
session_start();

if (isset($_SESSION['username'])) {
    echo $_SESSION['username'];
}
else {
    echo "Not working.";
}
?>

它在我的本地主机上打印出了会话的值,但没有在我的网站上打印出来。正如我为上面的 else 语句设置的那样,它给了我 "Not Working"。

我认为这是我的 phpinfo.php 中的问题,所以我用我的本地主机 phpinfo.php 文件分析了会话部分的每个部分,其中一些是相同的。其他人没有。

会话(网站)值:(第一个 -> 本地值)(第二个 -> 主值)

Session Support enabled
Registered save handlers    files user sqlite
Registered serializer handlers  php php_binary wddx

Directive   Local Value Master Value
session.auto_start                  Off Off
session.bug_compat_42               Off Off
session.bug_compat_warn             Off Off
session.cache_expire                180 180
session.cache_limiter               nocache nocache
session.cookie_domain               no value    no value
session.cookie_httponly             Off Off
session.cookie_lifetime             0   0
session.cookie_path                /    /
session.cookie_secure              Off  Off
session.entropy_file               /dev/urandom /dev/urandom
session.entropy_length             0    0
session.gc_divisor                 1000 1000
session.gc_maxlifetime             1440 1440
session.gc_probability              1   1
session.hash_bits_per_character     4   4
session.hash_function               0   0
session.name                        PHPSESSID   PHPSESSID
session.referer_check               no value    no value
session.save_handler                files   files
session.save_path                   /var/php_sessions   /var/php_sessions
session.serialize_handler           php php
session.use_cookies                 On  On
session.use_only_cookies            On  On
session.use_trans_sid               1   1

会话(本地主机)值:(第一个 -> 本地值)(第二个 -> 主值)

session.auto_start                      Off Off
session.cache_expire                    180 180
session.cache_limiter                   nocache nocache
session.cookie_domain                   no value    no value
session.cookie_httponly                 Off Off
session.cookie_lifetime                 0   0
session.cookie_path                     /   /
session.cookie_secure                   Off Off
session.entropy_file                    no value    no value
session.entropy_length                  0   0
session.gc_divisor                      1000    1000
session.gc_maxlifetime                  1440    1440
session.gc_probability                  1       1
session.hash_bits_per_character         5       5
session.hash_function                   0       0
session.name                            PHPSESSID   PHPSESSID
session.referer_check                   no value    no value
session.save_handler                    files   files
session.save_path                       C:\xampp\tmp    C:\xampp\tmp
session.serialize_handler               php     php
session.upload_progress.cleanup         On      On
session.upload_progress.enabled         On      On
session.upload_progress.freq            1%      1%
session.upload_progress.min_freq        1       1
session.upload_progress.name            PHP_SESSION_UPLOAD_PROGRESS  PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix          upload_progress_    upload_progress_
session.use_cookies                     On      On
session.use_only_cookies                Off     Off
session.use_strict_mode                 Off     Off
session.use_trans_sid                   0       0

我不确定 phpinfo() 的信息是否重要,但我希望它可以解决问题。

尝试将 php.ini session.save_path 值设置为 /tmp,像这样

session.save_path = "/tmp"

如果您无权覆盖服务器上的 php.ini 文件,您可以尝试使用

设置路径
session_save_path("/tmp");

调用前用上面这句话session_start();