Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
2 / 2 / 0
Регистрация: 15.10.2014
Сообщений: 61

Доступ к странице только после авторизации

07.06.2015, 14:52. Показов 4064. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, нужно закрыть доступ к */my_notes.php, до момента пока пользователь не пройдет авторизацию.

my_notes.php
Кликните здесь для просмотра всего текста
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
 
$note_name = 'note.txt';
$uniqueNotePerIP = true;
 
if($uniqueNotePerIP){
    
    // Используем IP адрес пользователя как имя для файла.
    // Данный метод подходит для случаев, когда приложение 
    // используют несколько пользователей одновременно.
    
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
        $note_name = 'notes/'.$_SERVER['HTTP_X_FORWARDED_FOR'].'.txt';
    }
    else{
        $note_name = 'notes/'.$_SERVER['REMOTE_ADDR'].'.txt';
    }
}
 
 
if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
    // Запрос AJAX
    
    if(isset($_POST['note'])){
        // Пишем файл на диск
        file_put_contents($note_name, $_POST['note']);
        echo '{"saved":1}';
    }
    
    exit;
}
 
$note_content = '';
 
if( file_exists($note_name) ){
    $note_content = htmlspecialchars( file_get_contents($note_name) );
}
 
?>
 
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Мои заметки</title>
        
        <!-- Стили -->
        <link rel="stylesheet" href="assets/css/styles.css" />
        
        <!-- Шрифт из коллекции Google -->
        <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Courgette" />
 
        
        <!--[if lt IE 9]>
          <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
    </head>
    
    <body>
 
        <div id="pad">
            <h2>Записка</h2>
            <textarea id="note"><?php echo $note_content ?></textarea>
        </div>
 
        <!-- JavaScript -->
        <script src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
        <script src="assets/js/script.js"></script>
     
    </body>
</html>

index.php
Кликните здесь для просмотра всего текста
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?
include('connectdb.php');// подключение к серверу MySql и выбор БД
$userinfo='';
$state='0';
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) ) {// если в куках лежит логин и зашифрованый пароля
  if (!isset($_GET['exit'])) {// если кнопка выход не была нажата
    $login=$_COOKIE['login'];
    $pass=$_COOKIE['pass'];
 
    // проверяем наличие пользователя в БД и достаём оттуда пароль
    $sql="SELECT id, pass FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    if(mysql_num_rows($res)>0){// если пользователь есть в БД
      $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД
      if(strcmp($pass,md5($userinfo['pass'])) == 0) { //проверяем схожесть пароля из БД с паролем из куков
 
    // достаём все данные из БД
    $sql="SELECT * FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    $userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
    $time=time();
    // устанавливаем куки для запоминания статуса пользователя
    setcookie("login",$login,$time+1800);
    setcookie("pass",$pass,$time+1800);
    $state = 1;// статус, если 1, тогда пользователь авторизован
      }
    }
  } else {
    //обнуляем куки, если была нажата кнопка выход
    setcookie("login");
    setcookie("pass");
  }
}
if($state != 1) {// если после проверки куков, оказалось, что пользователь не авторизован, то идем дальше
  if( (isset($_POST['login'])) & (isset($_POST['pass'])) ){ // если пользователь ввёл логин и пароль
  $login = $_POST['login']; 
 
  // проверяем наличие пользователя в БД и достаём оттуда пароль
  $sql = "SELECT id, pass FROM users WHERE login='$login'";
  $res = mysql_query($sql);
    if(mysql_num_rows($res)>0) {// если пользователь есть в БД
      $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД и номер пользователя
      $pass = $_POST['pass'];
      if(strcmp($pass,$userinfo['pass'])==0){
 
    // достаём все данные из БД
    $sql="SELECT * FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    $userinfo=mysql_fetch_array($res);// в этой переменной будет лежать вся информация о пользователе из БД
    $time=time();
    // устанавливаем куки для запоминания статуса пользователя, пароль шифруем
    //setcookie("login", $login, $time+1800);
//  setcookie("pass", md5($pass), $time+1800);
    $state = 1;// статус, если 1, тогда пользователь авторизован
      }
    }
  }
}
if($state != 1) {
?>
<form method="post" action="/index.php">
Логин: <input type="text" size="20" name="login"/><br />
Пароль: <input type="password" name="pass" size="20"/><br />
<input type="submit" value="Войти"/>
</form>
<br /><a href="/register.php">Регистрация</a>
<?
} else {
  echo 'Вы вошли на сайт!<br /> Ваш Логин: '.$userinfo["login"].'<br />Ваш E-mail: '.$userinfo["email"].'<br /> <a href="/my_notes.php">Мои заметки</a> <br /><a href="/index.php?exit=y">Выход</a>';
}
?>


Добавлено через 13 часов 42 минуты
тема еще актуальная
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2015, 14:52
Ответы с готовыми решениями:

Доступ незарегистрированным только к странице авторизации
Привет всем. У меня такой вот простой вопрос. У меня есть 3 формы: Авторизация, Регистрация и Общий список. Нужно в web-конфиге как-то...

Доступ к JSP только после авторизации в Servlet
Однако, приветствую! Есть Dynamic Web Project. Есть две страницы: login.jsp и secret.jsp Есть также сервлет myServlet.java который...

Не удается получить доступ к странице авторизации wi-fi
Добрый день! При подключении к общественной сети переходит на страницу авторизации. Но она не открывается, высвечивается &quot;не удается...

1
261 / 236 / 161
Регистрация: 10.12.2011
Сообщений: 513
07.06.2015, 17:27
Лучший ответ Сообщение было отмечено YaJora как решение

Решение

Перед тем как вы начнете читать, index.php - это файл авторизации?

Не совсем понятны вот эти моменты:

Кликните здесь для просмотра всего текста
1) При первом посещении сайта у пользователя ну никак не может быть cookie ...
Просто люди так авторизацию никогда не пройдут =)

PHP
1
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) )
Наверное Вы хотели проверить на то, проходил ли пользователь авторизацию(и кто же пароли хранит в cookies...).

PHP
1
if( empty($_COOKIE['login']) && empty($_COOKIE['pass']) )
2) Зачем вам проверять вот это:

PHP
1
if (!isset($_GET['exit']))
Не проще создать к примеру файлик log_out.php, и в нем прописать пару строчек для удаления cookies.
Потом сделать редирект на index.php, в этом же файле. Сам же файл подключить в my_notes.php
,и в нем сделать ссылку на него.

3) Может вместо $_COOKIE, там должно было быть $_POST(ну или $_REQUEST на худой конец).
И Вы после двух строчек ниже фактически передаете данные значения в базу, не обезвредив их
(от возможных sql-инъекций) ...

PHP
1
2
3
 
     $login=$_POST['login'];
     $pass=$_POST['pass'];
4) Вот тут интересный момент, зачем отдельно проверять пароль, и потом создавать вложенный запрос ?
Делайте запрос в базу сразу с паролем. Получайте необходимые данные и работайте с ними, не мучьте себя.

PHP
1
$sql="SELECT * FROM users WHERE login='$login' AND pass='$pass'";
5) Зачем вот эта проверка ?

PHP
1
if(strcmp($pass,md5($userinfo['pass'])) == 0)
Вам вместо пароля юзеры md5() хэш в поле вводят?)

6) Вот суть статуса, если пользователь прошел авторизацию =) Раз Вы ему печеньки дали, то он авторизирован

PHP
1
$state = 1;// статус, если 1, тогда пользователь авторизован


Дальше мораль такова, если поймете смысл выше, то пользователи не увидят ссылки в блоке else.

Добавлено через 19 минут
Подправил код в пункте 1)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2015, 17:27
Помогаю со студенческими работами здесь

Как сделать доступ к PHP странице после логина на aspx странице?
Как сделать доступ к PHP странице после логина на aspx странице? Сделал система аутентификации и авторизации через логин для защиты к...

Форма авторизации должна выводиться на странице только при передаче GET
Всем привет, я только учись по этому извиняюсь зарание, есть задача Форма авторизации должна выводиться на странице только при передаче...

Доступ к странице только с форума phpBB
Ребят, подскажите-ка: есть форум на phpBB. В корне каталога с форумом имеется &quot;левая&quot; папка folder, в которой лежит скрипт index.php с...

Доступ к веб-странице только для мобильных устройств
Возможно ли сделать, что бы доступ к веб-странице был открыт только для мобильных устройств, для тех-же кто заходит с ПК вылетала ошибка...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru