【发布时间】: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 网站托管。我会联系客服了解路径。