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

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

07.06.2015, 14:52. Показов 4055. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru