【问题标题】:PHP Session Does Not Work on WebsitePHP 会话在网站上不起作用
【发布时间】:2015-08-11 03:33:07
【问题描述】:

我创建了一个 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 语句设置的那样,它给了我“不工作”。

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

会话(网站)值:(1st -> 本地值)(2nd-> 主值)

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

会话(本地主机)值:(1st -> 本地值)(2nd-> 主值)

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() 的信息是否重要,但我希望它可以解决问题。

【问题讨论】:

  • 我还检查了 session.save_path,发现我的 xampp 会话文件保存在 C:\xampp\tmp 中,但在我的网站 session.save_path 中,文件 /var/php_sessions 不存在。我必须制作文件还是我通常看不到它?
  • login_validation.php 和 test.php 在同一个服务器域中?
  • 您可能需要创建目录/var/php_sessions 并授予其写入权限。
  • 就在 start_session() 之后,如果您执行 print_r($_SESSION),它会打印任何内容(应该是会话 ID)吗?如果不是,我怀疑这是权限问题。您的网站托管在哪里?正如 Jeemusu 所说,您的主机可能已将会话保存路径更改为不同于默认值的路径。
  • 在 login_val.php 文件中,我把 print_r($_SESSION);在我检查它是否已设置并打印出数组([用户名] => 值)之后,但是当我单击返回时,它需要我到 test.php,它给了我数组()。我正在使用 domain.com 网站托管。我会联系客服了解路径。

标签: php session xampp


【解决方案1】:

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

session.save_path = "/tmp"

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

session_save_path("/tmp");

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

【讨论】:

  • 谢谢。在我将 php.ini 中的路径更改为 /tmp 并创建了一个 /tmp 目录后,它就起作用了。
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 2016-07-20
  • 2016-02-26
  • 2014-07-09
相关资源
最近更新 更多