Крупные увеличения скорости процессора, которые произошли за прошлые 30 лет, не могут быть пропущены. Весь способ умных мыслей, таких как конвейерная обработка и упреждающее ветвление, а также улучшения электронной стороны дизайна процессора, означает, что программисты сегодня могут волноваться больше о дизайне и пригодности для обслуживания их программ и волноваться меньше о подсчете тактов.
как насчет использования этого для настройки сеанса
session_start();
if( isset($_POST['username']) && isset($_POST['password']) )
{
if( auth($_POST['username'], $_POST['password']) )
{
// auth okay, setup session
$_SESSION['user'] = $_POST['username'];
// redirect to required page
header( "Location: index.php" );
} else {
// didn't auth go back to loginform
header( "Location: loginform.html" );
}
} else {
// username and password not given so go back to login
header( "Location: loginform.html" );
}
и в верхней части каждой «безопасной» страницы используйте этот код:
session_start();
session_regenerate_id();
if(!isset($_SESSION['user'])) // if there is no valid session
{
header("Location: loginform.html");
}
это сохраняет очень небольшой объем кода в верхней части каждой page вместо выполнения полной аутентификации вверху каждой страницы. Чтобы выйти из сеанса:
session_start();
unset($_SESSION['user']);
session_destroy();
header("Location: loginform.html");
Во-первых, не сохраняйте пароль в сеансе. Это плохо . Во-вторых, не сохраняйте имя пользователя в сеансе до после , которое вы прошли.
Попробуйте следующее:
<?php
session_start();
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$authed = auth($username, $password);
if (! $authed) {
header('Location: http://website.com/fail.php');
} else {
$_SESSION['username'] = $username;
}
}
if (isset($_SESSION['username'])) {
$navbar = 1;
$logindisplay = 0;
} else {
header ('Location: http://website.com/fail.php');
}
Просто несколько случайных точек, даже если они могут не иметь отношения к проблеме:
Не храните пароль в открытом виде в сеансе . Оценивайте только, если пароль в порядке, затем сохраните loggedIn = true
или что-то подобное в сеансе.
Проверьте, установлены ли для пароля и имя пользователя $ _ POSTed
, а не || (или).
Не передавайте пароль и имя пользователя туда и обратно между $ password
и $ _ SESSION ['пароль']
. Выберите одно место для хранения данных и оставьте его там.
Вы проверяли, можете ли вы вообще что-нибудь хранить в сеансе? Файлы cookie можно и т. Д.?
Разве это не все, что вам нужно сделать, чтобы значительно упростить код?
if (isset($_POST['username'] && isset($_POST['password'])) {
if (auth($_POST['username'], $_POST['password'])) {
$_SESSION['user'] = /* userid or name or token or something */;
header(/* to next page */);
} else {
// display "User credentials incorrect", stay on login form
}
} else {
// optionally: display "please fill out all fields"
}
Вот еще несколько вещей, которые могут вам помочь, а могут и не помочь:
error_reporting
? ( см. Также ) display_errors
? session_start
- это первое, что вы делаете на своей странице? ничего не должно выводить до Заголовки не являются вызовами функций. Они помещают директиву в заголовки HTTP, и последней выполняется та, которая будет обработана. Допустим, если у вас есть что-то вроде этого
if ($bAuthed)
{
header("location: login.php");
}
// error case
header("location: error-login.php");
, вы всегда будете перенаправлены на error-login.php, что бы ни случилось. Заголовки - это не вызовы функций!
Решение моей конкретной проблемы выше
session_start();
if(isset($_POST['username']) || isset($_POST['password'])){
$username = $_POST['username'];
$password = $_POST['password'];
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
}
if(isset($_SESSION['username']) || isset($_SESSION['password'])){
$navbar = "1";
$logindisplay = "0";
$username = $_SESSION['username'];
$password = $_SESSION['password'];
$authed = auth($username, $password);
if( $authed == "0" ){
header('Location:http://website.com/fail.php');
}
} else {
header('Location:http://website.com/fail.php');
}