【发布时间】:2018-02-09 15:39:32
【问题描述】:
下面是我的脚本test.php。当我单击提交时,它会将其作为登录尝试处理并成功设置$_SESSION 变量。但是当我重新加载页面(通过单击返回自身的链接)时,$_SESSION 是空的。
<?php
//test.php
session_start ();
function isUserLoggedIn (&$username)
{
$loggedIn = isset ($_SESSION['loggedin']);
if ($loggedIn)
$username = $_SESSION['user'];
else
$username = '';
return $loggedIn;
}
function processLogin ()
{
$_SESSION['loggedin'] = TRUE;
$_SESSION['user'] = "podunk";
session_write_close ();
}
echo '$_SESSION before we do anything..................: ';
print_r ($_SESSION);
echo "<br>";
if (isset($_POST['Submit'])) processLogin ();
$loggedIn = isUserLoggedIn ($username);
echo '$_SESSION after processing any login attempt: ';
print_r ($_SESSION);
echo "<br>";
if ($loggedIn)
echo "I AM LOGGED IN as $username!";
else
echo "I am logged out :(";
?>
<html>
<body>
<form name="form1" method="post" action="test.php">
<input type="submit" name="Submit" value="Login">
</form>
<a href="test.php">Reload page</a>
</body>
</html>
这是我在我的 Linux apache2 服务器上运行它的时候。当我在 XAMPP 上运行它时,$_SESSION 仍然存在并且用户保持登录状态。所以我猜这与 php.ini 有关系......但也许我在这里犯了一个错误,XAMPP 正在被原谅。
Linux 服务器正在成功运行 WordPress,所以它的设置不会太奇怪。刚刚做了系统升级,recommended。 session.save_path 存在并且其中有一些今天过时的东西,所以我认为它正在工作,虽然它由 root 拥有而不是 www-data,所以如果这是一个问题,请 IDK。
这里有一些来自 php 信息的其他内容。关于那个 cookie_path 的 IDK,所以我将其更改为与 session.save_path 相同的位置,FWIW。
session.auto_start On On
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
使用 Chrome、Firefox 和 IE 时的行为是相同的。
TIA。
【问题讨论】:
-
你可以在存放session的目录中检查你是否有写权限。
-
您的 PHP 配置是否设置为允许基于 cookie 的会话? session.use_cookies php.net/manual/en/…
-
你能测试一下
session_write_close()是返回true还是false? -
R:
$var_dump($_COOKIE)确实显示了一些 cookie;当我重新加载页面时,它们都没有改变,但它们看起来都不相关(它们没有被命名为“session_id”或“session”或类似的名称。
标签: php