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

Кнопка выход и настройка сессии

03.01.2016, 07:07. Показов 4092. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите настроить кнопку выход, по идеи должно работать все но ничего она не работает. Еще помимо куков я хочу ввести сессию но не получается помогите((
Файлы я выложил ниже, помогите пожалуйста
auth.php
PHP
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
<form method="POST">
Логин <input name="login" type="text"><br>
Пароль <input name="password" type="password"><br>
<input name="submit" type="submit" value="Войти">
</form>
<?PHP
include 'bd.php';
function generateCode($length=6) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
$code = "";
$clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;
}
if(isset($_POST['submit']))
{
  $query = mysqli_query($db,"SELECT user_id, user_password FROM users WHERE user_login='".mysqli_real_escape_string($db,$_POST['login'])."' LIMIT 1");
  $data = mysqli_fetch_assoc($query);
  if($data['user_password'] === md5(md5($_POST['password'])))
    {
    $hash = md5(generateCode(10));
        mysqli_query($db, "UPDATE users SET user_hash='".$hash."' WHERE user_id='".$data['user_id']."'");
        setcookie("id", $data['user_id'], time()+60*60*24*30);
    setcookie("hash", $hash, time()+60*60*24*30);
    header("Location: index.php"); exit();
    }
        else
    {
    print "Вы ввели неправильный логин/пароль";
    }
}
?>
bd.php
PHP
1
2
3
<?PHP
    $db = mysqli_connect("localhost", "killin", "89312124200v", "killin");
 ?>
exit.php
PHP
1
2
3
4
5
6
7
<?PHP
function exit_user() {
    setcookie("user_id", '', time()-60*60*24*30);
    setcookie("hash", '', time()-60*60*24*30);
    header("Location: index.php"); exit();
  }
  ?>
index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?PHP
if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
{
include "bd.php";      
$query = mysqli_query($db, "SELECT *,INET_NTOA(user_ip) AS user_ip FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
$userdata = mysqli_fetch_assoc($query);
if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']))
{
setcookie("id", "", time() - 3600*24*30*12, "/");
setcookie("hash", "", time() - 3600*24*30*12, "/");
print "Хм, что-то не получилось";
}
else
{
print "Привет, ".$userdata['user_login'].". Всё работает!";
echo '<a href="exit.php">Выход</a>';
}
}
else
{
    print "Включите куки";
}
?>
reg.php
PHP
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
<table>
<form method="post">
<tr>
  <td>Логин:</td>
  <td><input type="text" name="login" value=""></td>
</tr>
<tr>
  <td>Пароль:</td>
  <td><input type="password" name="password" value=""></td>
</tr>
<tr>
  <td></td>
  <td><input style="width:100%;" type="submit" name="submit" value="Регистрация"></td>
</tr>
</form>
</table>
<?PHP
include "bd.php";
if(isset($_POST['submit']))
{
{
$login = $_POST["login"];
$password = $_POST['password'];
}
if(empty($login)){
        exit('Логин пустой');
        }
if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login']))
    {
    exit('Логин может состоять только из английских букв и цыфр.');
    }  
if(empty($password)){
        exit('Пароль пустой');
        }
if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['password']))
    {
    exit('Пароль может состоять только из английских букв и цыфр.');
    }  
if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30)
    {
    exit('Логин должен быть от 3-х до 30-ти символов.');
    }
if(strlen($_POST['password']) < 5 or strlen($_POST['password']) > 30)
    {
    exit('Пароль должен быть от 5-ти до 30-ти символов.');
    }
   $query = mysqli_query($db, "SELECT `user_id` FROM users WHERE `user_login`='".mysqli_real_escape_string($db, $_POST['login'])."'");
   if(mysqli_num_rows($query) > 0)
   {
   exit('Пользователь с таким логином уже существует в базе данных.'); }
 
$password = &$passwordhash;
$passwordhash = md5(md5(trim($_POST['password'])));
mysqli_query($db,"INSERT INTO users SET user_login='".$login."', user_password='".$passwordhash."'");
echo "Вы успешно зарегестрировались под именем $login<br>
  <br>Вас автоматически перенаправит на страницу авторизации.";
header('Refresh:3; URL=/kill/auth.php');
exit;
}
?>
Заранее спасибо
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2016, 07:07
Ответы с готовыми решениями:

События сессии пользователя (вход/выход/блокировка/разблокировка/сон/выход из сна/выключение/перезапуск)
Добрый день. Мне нужно слушать эти события (указаны в заголовке) в реальном времени для логирования. Можно слушать разные события разными...

Выход из сессии
Ребят, привет. вот смотрите, есть у меня начало сессииsession_start(); и есть завершение if (isset($_GET)){ ...

Выход из сессии
Проблема с выходом. Выходит из сессии после второго нажатия на кнопку выхода(name=exit). Как сделать так, чтобы выходило с первого раза. ...

8
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
03.01.2016, 09:15
Цитата Сообщение от Vanlick Посмотреть сообщение
$db = mysqli_connect("....", ".....", ".....", ".....");
Удалите пароли, ими святиться не стоит...
Цитата Сообщение от Vanlick Посмотреть сообщение
по идеи должно работать все но ничего она не работает
Что именно не работает?
Цитата Сообщение от Vanlick Посмотреть сообщение
Еще помимо куков я хочу ввести сессию но не получается
Вам надо во всех файла (или в одном, который инклюдится ко всем), после <?php писать: session_start();, а при выходи из системы: session_destroy();, например:
PHP
1
2
3
4
5
6
7
function exit_user() 
{
    setcookie("user_id", '', time() -60*60*24*30);
    setcookie("hash", '', time() -60*60*24*30);
    session_destroy();
    header("Location: index.php"); exit();
 }
О сессии: http://ufi.su/60

Если я правильно понял Ваш вопрос конечно.... Если неправильно понял, то извините...
0
1 / 2 / 0
Регистрация: 03.03.2014
Сообщений: 33
03.01.2016, 09:27  [ТС]
кнопка выход не работает, она заходит на exit.php а обратно на index.php не перенаправляется и не выходит из аккаунта
0
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
03.01.2016, 09:31
Цитата Сообщение от Vanlick Посмотреть сообщение
она заходит на exit.php а обратно на index.php не перенаправляется
Сделайте файл exit.php так:
PHP
1
2
3
4
5
<?php
setcookie("user_id", '', time() -60*60*24*30);
setcookie("hash", '', time() -60*60*24*30);
session_destroy();
header("Location: index.php"); exit();
Так должно работать. У вас в функции, а в этом файле эта функция только создается, но не вызывается...
1
1 / 2 / 0
Регистрация: 03.03.2014
Сообщений: 33
03.01.2016, 09:39  [ТС]
Cпасибо! А если у меня в bd.php прописано session_start(); а в exit.php session_destroy();
Сессия работает?
Какие у меня еще недочеты есть в регистрации?
0
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
03.01.2016, 09:44
Так можно (это я все ещё про выход):
PHP
1
2
3
4
5
6
7
8
9
<?PHP
function exit_user() 
{
    setcookie("user_id", '', time()-60*60*24*30);
    setcookie("hash", '', time()-60*60*24*30);
    header("Location: index.php"); exit();
  }
 
exit_user();
Добавлено через 4 минуты
Цитата Сообщение от Vanlick Посмотреть сообщение
Сессия работает?
Да, ведь что бы разрушить сессию (session_destroy()), необходимо перейти на файл exit.php...
Цитата Сообщение от Vanlick Посмотреть сообщение
Какие у меня еще недочеты есть в регистрации?
Код не разглядывал... Я бы добавил проверку на посещение файла авторизованн или гость. Если гость пытается посетить exit.php то отправить его на главную, например.
0
1 / 2 / 0
Регистрация: 03.03.2014
Сообщений: 33
03.01.2016, 09:48  [ТС]
Цитата Сообщение от Raisin Zn Посмотреть сообщение
Код не разглядывал... Я бы добавил проверку на посещение файла авторизованн или гость. Если гость пытается посетить exit.php то отправить его на главную, например.
как так сделать
0
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
03.01.2016, 11:19
Лучший ответ Сообщение было отмечено Vanlick как решение

Решение

Судя по вашему коду, то можно так, в начале файла:
PHP
1
2
3
4
5
if (!$_COOKIE['id'])
{
    header("Location: index.php");
    exit();
}
Как то так например:
PHP
1
2
3
4
5
6
7
8
9
10
11
if (!$_COOKIE['id'])
{
    header("Location: index.php");
    exit();
}
else
{
    setcookie("user_id", '', time()-60*60*24*30);
    setcookie("hash", '', time()-60*60*24*30);
    header("Location: index.php"); exit();
}
или так:
PHP
1
2
3
4
5
6
7
8
9
if (!$_COOKIE['id'])
{
    header("Location: index.php");
    exit();
}
 
setcookie("user_id", '', time()-60*60*24*30);
setcookie("hash", '', time()-60*60*24*30);
header("Location: index.php"); exit();
Как вам угодно.

Добавлено через 1 час 25 минут
Подошло?
1
1 / 2 / 0
Регистрация: 03.03.2014
Сообщений: 33
03.01.2016, 12:05  [ТС]
Цитата Сообщение от Raisin Zn Посмотреть сообщение
Подошло?
да спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.01.2016, 12:05
Помогаю со студенческими работами здесь

Выход из терминальной сессии
Добрый день. У меня стоит Windows Server 2008. К нему через терминал подключаются пользователи, причем в настройках RDP прописывается...

Выход из сессии обязательно с кнопкой
Друзья помогите выйти из сессии при помощи красивой кнопки)

Выход из аккаунта и обнуление сессии
Здравствуйте! Я делаю сайт, где у пользователей будут свои страницы, на которые они будут попадать через систему аутентификации. Решил я...

Кнопка 'Выход'
Прошу помощи немогу розобраться с закрытием програмы. Дело в том что есть кнопка 'Выход' и на нее я прописал закрытие програмы и перед...

Кнопка выход
создал кнопочную форму при переходе в определённый раздел не могу из него выйти нажимаю на кнопку выход и мне выдаёт ошибку:...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru