сессии php для аутентификации пользователя на форме входа в систему

Крупные увеличения скорости процессора, которые произошли за прошлые 30 лет, не могут быть пропущены. Весь способ умных мыслей, таких как конвейерная обработка и упреждающее ветвление, а также улучшения электронной стороны дизайна процессора, означает, что программисты сегодня могут волноваться больше о дизайне и пригодности для обслуживания их программ и волноваться меньше о подсчете тактов.

8
задан Pascal MARTIN 7 August 2009 в 06:22
поделиться

6 ответов

как насчет использования этого для настройки сеанса

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");
21
ответ дан 5 December 2019 в 05:03
поделиться

Во-первых, не сохраняйте пароль в сеансе. Это плохо . Во-вторых, не сохраняйте имя пользователя в сеансе до после , которое вы прошли.

Попробуйте следующее:

<?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');
}
9
ответ дан 5 December 2019 в 05:03
поделиться

Просто несколько случайных точек, даже если они могут не иметь отношения к проблеме:

  • Не храните пароль в открытом виде в сеансе . Оценивайте только, если пароль в порядке, затем сохраните 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"
}
3
ответ дан 5 December 2019 в 05:03
поделиться

Вот еще несколько вещей, которые могут вам помочь, а могут и не помочь:

  • У вас включен error_reporting ? ( см. Также )
  • Включено ли display_errors ?
  • session_start - это первое, что вы делаете на своей странице? ничего не должно выводить до
  • Созданы ли файлы cookie на стороне клиента?
  • Местоположение заголовка указывает, в каком браузере он должен перейти на другую страницу; он не останавливает выполнение PHP-скрипта. Вы можете захотеть (почти всегда) добавить после него слово "exit".
1
ответ дан 5 December 2019 в 05:03
поделиться

Заголовки не являются вызовами функций. Они помещают директиву в заголовки HTTP, и последней выполняется та, которая будет обработана. Допустим, если у вас есть что-то вроде этого

if ($bAuthed)
{
     header("location: login.php");
}

// error case
header("location: error-login.php");

, вы всегда будете перенаправлены на error-login.php, что бы ни случилось. Заголовки - это не вызовы функций!

1
ответ дан 5 December 2019 в 05:03
поделиться

Решение моей конкретной проблемы выше

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');
}
0
ответ дан 5 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: