проверка входа в систему, перенаправление страниц на всех страницах в php - PullRequest
0 голосов
/ 24 августа 2009

Я делаю простой динамический веб-сайт с использованием PHP, где я позволяю пользователю войти в систему, а затем получить доступ к определенным страницам. Итак, вот что я сделал до сих пор.

Зарегистрированные значения принимаются через переменные $ _POST в сценарии php, где он выбирает значения из базы данных для зарегистрированных пользователей. Если пользователь найден, я делаю следующее:

session_register('userid');
$_SESSION['userid'] = $username;//this is taken from $_POST
$_SESSION['accesslevel'] = $access;

в начале скрипта php я поставил session_start();

Теперь вот моя проблема.

Теперь на каждой странице я должен проверять, разрешено ли пользователю просматривать эту страницу или нет, если его нет, он должен быть перенаправлен на login.php, если он есть, то загрузка страницы должна продолжаться.

Теперь я узнал, что единственный способ поддерживать значения на страницах php - это использовать $_SESSION переменные, и на какой бы странице я ни использовал переменные сеанса, я должен написать session_start() на каждой странице в качестве первой строки , иначе я получу сообщение "Заголовки уже отправлены".

Странно, я точно это сделал, но все еще получаю ошибки с "заголовками уже отправлено".

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

  • Могу ли я использовать функцию include () как?
  • Являются ли сеансы единственным способом передачи данных через php-страницы.
  • Что лучше?

У меня есть следующий код:

<?php
session_start();
if(!isset($_SESSION['user']))
{
    $_SESSION['loc'] = "adminhome.php";
    header("location:ettschoollogin.php");
    exit();
}
    ?>

Находится сверху каждой страницы, которая хочет проверить, вошел ли пользователь в систему.

И это скрипт для проверки входа в систему

<?php
session_start();
include("connection.php");
$userid =$_POST['userid'];
$userpwd =$_POST['userpwd'];

$query="Select UNAME,UPASSWORD,SCHOOL,uaccess from schooluser where uname = '$userid'";

$result=mysql_query($query) or die("couldn't execute the query");
$row=mysql_fetch_array($result);
$useraccess = $row["uaccess"];


$school =$row[2];

if(($row[0]==$userid)&&($row[1]==$userpwd))
{
        session_register('userid');
        $_SESSION['userid']=$userid;
        $_SESSION['school']=$school;

    if($useraccess =="admin")   
    {       
        header("Location:adminhome.php");
    }

    if($useraccess !="admin")
    {
        header("Location:school_main.php");

    }
}
else
{
    header("Location:ettschoollogin.php?err=1"); 
}
?>

я знал об общей ошибке наличия лишних пробелов после "?>", НО Я ЕЩЕ ПОЛУЧИЛ ЭТО.

Спасибо, ребята, я пропустил, и в файле "connection.php" на самом деле были лишние пробелы после "?>", Я удалил его раньше, но кое-как, как файл снова был переписан. Спасибо большое.

Ответы [ 3 ]

2 голосов
/ 24 августа 2009

Да, вы можете использовать включить. Поместите все ваши общие функции в отдельный php-файл и «включите» его в начало каждого файла.

Вы можете использовать куки для хранения информации (обычно это просто идентификатор, который вы используете для поиска дополнительной информации на странице PHP). Обычно сессии PHP обрабатываются с использованием куки. См. setcookie в документации.

Возможно, вы получаете сообщения об ошибках из-за случайных символов за пределами блока <?php ?>. Распространенной ошибкой является наличие дополнительной пустой строки в конце включаемого файла после ?>. Эта пустая строка будет выведена, и ваши заголовки будут отправлены. Если это не проблема, вам просто нужно переместить код, связанный с сеансом, над кодом, который может генерировать какой-либо вывод (например, с помощью print или echo).

2 голосов
/ 24 августа 2009

• Могу ли я использовать функцию include () как?

Да. Вы можете делать все, что хотите, перед вызовом session_start (), только вы не должны ничего выводить, даже один пробел или символ. Возможно, вы уже что-то выделили, возможно, при автоматическом включении или при добавлении apache.

• Являются ли сеансы единственным способом передачи данных через страницы php. • Какой способ лучше?

Другими способами являются куки, публикация и получение параметров. Но сеансы являются единственным способом безопасной передачи данных между страницами без их отправки клиенту и обратно (что может представлять угрозу безопасности)

1 голос
/ 22 августа 2012

Напишите ob_start(); в верхней части кода, и тогда вы не получите сообщение об ошибке "заголовки уже отправлены"

...