Oscar
Новичок
.htpasswd logout
Знаю, что на эту тему уже говорили и далеко не раз и что везде пишут: используйте куки или сессии,
но вот я тут один вариант придумал и хотел узнать мнения о его надёжности.
Совершенно случайно наткнулся на следующее поведение Apache:
Если в .htaccess задан файл ErrorDocument 401 test.php, то обращение к test.php происходит после вызова окна авторизации, но до дого, как пользователь введёт данные.
И что с того?
При поиску по форуму нашел в теме Нетривиальный контроль доступа увидел фразу "ПЕРЕПИСЫВАЕМ .htaccess" и подумал: а почему бы не переписать .htpasswd ?
Суть метода:
0. .htaccess (с HTTP авторизацией .htpasswd и ErrorDocument 401 login.php)
1. logout.php : удаляет из .htpasswd строку с текущим пользователем и записывает её в файл .lock
2. login.php : добавляет в .htpasswd строку из .lock и удаляет .lock
И вот тут самое оно: Поскольку login.php вызовется ДО проверки авторизации, то все пользователи будут вовремя находится в файле .htpasswd
------
Вопрос: насколько это надёжно?
------
В общем вот код:
.htacess
index.php
logout.php
login.php
Знаю, что на эту тему уже говорили и далеко не раз и что везде пишут: используйте куки или сессии,
но вот я тут один вариант придумал и хотел узнать мнения о его надёжности.
Совершенно случайно наткнулся на следующее поведение Apache:
Если в .htaccess задан файл ErrorDocument 401 test.php, то обращение к test.php происходит после вызова окна авторизации, но до дого, как пользователь введёт данные.
И что с того?
При поиску по форуму нашел в теме Нетривиальный контроль доступа увидел фразу "ПЕРЕПИСЫВАЕМ .htaccess" и подумал: а почему бы не переписать .htpasswd ?
Суть метода:
0. .htaccess (с HTTP авторизацией .htpasswd и ErrorDocument 401 login.php)
1. logout.php : удаляет из .htpasswd строку с текущим пользователем и записывает её в файл .lock
2. login.php : добавляет в .htpasswd строку из .lock и удаляет .lock
И вот тут самое оно: Поскольку login.php вызовется ДО проверки авторизации, то все пользователи будут вовремя находится в файле .htpasswd
------
Вопрос: насколько это надёжно?
------
В общем вот код:
.htacess
Код:
DirectoryIndex index.php
<Files index.php>
AuthUserFile /path_to_this_directory/.htpasswd
AuthName "test"
AuthType Basic
require valid-user
</Files>
ErrorDocument 401 /url_path/login.php
PHP:
Welcome, <?=$_SERVER["PHP_AUTH_USER"]?>!<br />
<br />
<a href="logout.php">logout</a>
PHP:
<?php
if (isset($_SERVER["PHP_AUTH_USER"]) && !file_exists(".lock")) {
$savedLine = "";
$newLines = array();
$oldLines = file(".htpasswd");
for($i = 0; $i < count($oldLines); $i++) {
if (strpos($oldLines[$i], $_SERVER["PHP_AUTH_USER"].":") === false) {
$newLines[count($newLines)] = $oldLines[$i];
} else {
$savedLine = $oldLines[$i];
}
}
$handle = fopen(".htpasswd", "w");
fwrite($handle, implode("", $newLines));
fclose($handle);
$handle = fopen(".lock", "w");
fwrite($handle, $savedLine);
fclose($handle);
}
?>
<a href="./">relogin</a>
PHP:
<?php
if (file_exists(".lock")) {
$handle = fopen(".htpasswd", "a");
fwrite($handle, implode("", file(".lock")));
fclose($handle);
unlink(".lock");
}
?>
<a href="./">login</a>