Сначала я подумал, что это просто проблема IE. Но теперь я включаю коды ошибок, и это показывает это:
Примечание: сеанс уже был запущен — игнорирование session_start () в /var/www/html/login.php в строке 7
Строка 7 — команда запуска сеанса.
У меня есть три файла. index.php, auth.php а также login.php который содержит весь процесс входа в систему:
index.php
<?php
echo "<a href=\"/login.php\">Log in</a>";
?>
auth.php
$_user_ = 'admin';
$_password_ = 'password';
session_start();
$url_action = (empty($_REQUEST['action'])) ? 'logIn' : $_REQUEST['action'];
$auth_realm = (isset($auth_realm)) ? $auth_realm : '';
if (isset($url_action)) {
if (is_callable($url_action)) {
call_user_func($url_action);
} else {
echo 'Function does not exist, request terminated';
};
};
function logIn() {
global $auth_realm;
if (!isset($_SESSION['username'])) {
if (!isset($_SESSION['login'])) {
$_SESSION['login'] = TRUE;
header('WWW-Authenticate: Basic realm="'.$auth_realm.'"');
header('HTTP/1.0 401 Unauthorized');
echo '<h1>Not authorized!</h1>';
echo '<p>You must enter a valid login and password.</p>';
echo '<a href="?action=logOut">Log in</a> | ';
echo '<a href="../">Back to the Website</a></p>';
exit;
} else {
$user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
$password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
$result = authenticate($user, $password);
if ($result == 0) {
$_SESSION['username'] = $user;
} else {
session_unset($_SESSION['login']);
errMes($result);
exit;
};
};
};
}
function authenticate($user, $password) {
global $_user_;
global $_password_;
if (($user == $_user_)&&($password == $_password_)) { return 0; }
else { return 1; };
}
function errMes($errno) {
switch ($errno) {
case 0:
break;
case 1:
echo '<h1>Not authorized!</h1>';
echo 'Username and password are incorrect.';
echo '<p><a href="?action=logOut">Log in</a> | ';
echo '<a href="../">Back to the Website</a></p>';
break;
default:
echo 'Unknown error';
};
}
function logOut() {
session_destroy();
session_unset();
if (isset($_SESSION['username'])) {
session_destroy($_SESSION['username']);
foreach(array_keys($_SESSION) as $k) unset($_SESSION[$k]);
echo "<h1>You've successfully logged out</h1>";
echo '<a href="?action=logIn">Log In</a> | ';
echo '<a href="../">Back to the Website</a>';
} else {
header("Location: ?action=logIn", TRUE, 301);
};
if (isset($_SESSION['login'])) { session_unset($_SESSION['login']); };
exit;
}
login.php
<?php
$auth_realm = 'My Website';
require_once 'auth.php';
session_start();
if(!isset($_SESSION['username'])) {
die('Please login first <a href="login.php?action=logIn">log in</a>.');
}
echo "<p>You've logged in as {$_SESSION['username']} ";
echo '<a href="?action=logOut">Log out</a></p>'
?>
==> Теперь вы вошли в систему, не передавая логин и пароль. Это недостаток безопасности, и он работает только с IE 11. Я попытался использовать несколько разных опций для удаления сеанса, но ничего не помогло. Кто может мне помочь?
Я также проверил это с Chrome, здесь он работает правильно, и я вынужден передать данные для входа после пункта 7.
Попробуйте выйти таким образом:
unset($_SESSION['username']);
session_destroy();
setcookie('PHPSESSID','',time()-3600,'/','',0,0); //unless you changed the PHP session cookie name
Других решений пока нет …