我将Apache用作Web服务器。 它设置为使用
进行表单身份验证<form method="POST">
Username: <input type="text" name="httpd_username" value="" />
Password: <input type="password" name="httpd_password" value="" />
<input type="submit" name="login" value="Login" />
</form>
我无法登录,并且$_SERVER['PHP_AUTH_USER']
设置正确。
凭据的后端是MySQL数据库。
我的问题是我受保护页面的注销过程。 我确实在附近挖了挖矿,对此有一个共识:
function logout() {
// if ($debug) { echo "Logging out...<br />"; }
echo "Logging out...<br />";
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
// if ($debug) { echo "Session params: "; print_r($params); echo "<br />"; }
echo "Session params: "; print_r($params); echo "<br />";
}
session_unset();
session_destroy();
$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)
|| isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';
$url = ($is_https ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
header("Location: {$url}");
}
不幸的是,这对我来说不起作用,我的会话仍然非常活跃。
我尝试取消设置($ _SERVER ['PHP_AUTH_USER']);但这也没有区别。
作为记录,print_r(session_get_cookie_params());
给了我这个:
Array ( [filemanager] => Array ( [logged] => testuser ) )
auth_users: Array ( [0] => testuser )
我必须丢失一些东西,但是呢?
[更新]
非常仔细地查看浏览器端正在创建的内容,我发现有一个名为“ session”的cookie,该cookie是通过成功登录创建的。
如果我手动删除该Cookie,则会话结束,并且我必须重新登录。那就是我需要删除的cookie。
我尝试了setcookie("session","",time()-3600);
和unset($_COOKIE['session']);
,但是都没有用;我想太容易了...
我到底该如何删除该东西?
注意:运行print_r($_COOKIE);
时,它位于:Array ( [session] => 79Faq7Mn3pEmTflhKWNLE5khuWX3aNF9hT3Q8AApX9VNwFKqnU6m0ii/UXCvQ4rP16DSJb7OJj2cpcrqg0U9AXxVYrsf8/NHJ9jyZGTM9nY1jPA2R3mINJyoTf991qDApoS2/0zWCuw= [fm_cache] => 1 [fileexchanger] => psrfekv0il94e1589ge0lkkoul )
[更新2]
实际上,我可以从我的PHP代码中删除Cookie名称“会话” ...
事实是,如果我刷新页面,则cookie会以不同的ID立即返回。
该会话cookie实际上是在页面之外创建的,就好像我将print_r($_COOKIE);
作为PHP文件中的第一行代码一样,我可以看到“会话” cookie在那里。
我只能看到的解释是它来自Apache。 这是从我的网站配置文件中获得的
<Directory "/var/www/html/pathtofolder/">
DirectoryIndex index.html
AuthFormProvider dbd
AuthType form
AuthName "Restricted Server"
Session On
SessionCookieName session path=/
SessionCryptoPassphrase secret
AuthDBDUserPWQuery "SELECT password FROM table WHERE username = %s"
ErrorDocument 401 /login.html
Require valid-user
</Directory>
我检查了一下,SessionCookieName session path=/
是创建该“会话” cookie的那个。
如果我将这一行注释掉,则简单的session_destroy();
会将我注销。
再说一次,这也太简单了,因为现在,每次我单击链接,提交表单,重新加载时,无论如何,我都将重定向到登录页面。
任何帮助将不胜感激。