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();
我创建了一个 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();