X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Помогите найти ошибку в куки!
hnerd
hnerd
Topic Starter сообщение 4.8.2014, 17:50; Ответить: hnerd
Сообщение #1



<?php
// Функция, которая запоминает имя в куки
function Login($username){
    if($username = '')
        return false;
    else{    
    setcookie('username', $username, time() + 3600 * 24 * 7);
    return true;
    }
}
//Функция удаляет куку
function Logout(){
    setcookie('username', '', time() -1);
}

$enter_site = false;
Logout();

if(count($_POST) > 0)
    $enter_site = Login($_POST['username']);

if($enter_site){
    header("Location: a.php");
    exit();
}

?>

<html>
    <head>
    <title>Вход на сайт</title>
    </head>
    <body>
        <h1>Вход на сайт</h1>
        <form action="" method="post">
        Введите имя:
            <br/>
            <input type="text" name="username" />
            <br/>
            <input type="submit" value="Войти" />
        </form>
    </body>
</html>

Это код php, согласно которому, если человек ввел в форму свое имя, то оно сохранится в массива $_POST['username']. И если, пользователь введет свое имя, то она автоматически перенаправляется на страницу a.php, вот код a.php:

<?php
if(isset($_COOKIE['username'])){
    $username = $_COOKIE['username'];
}

if($username == null){
    header("Location: index.php");
}
?>

<html>
    <head>
        <title>Страница А</title>
    </head>
    <body>
        <h1>Страница "А"</h1>
        <b>А</b> и <a href="b.php">Б</a> сидели на трубе.
        <br/>
        <br/>
        Вы вошли как <b><?php echo $username; ?></b> |
        <a href="index.php">Выход</a>
    </body>
</html>

Проблема в том, что, после того, как я ввожу имя в форму, меня не перенаправляют на страницу a.php, а направляют на страницу формы.

В чем же причина? Подскажите мне, пожалуйста! Не могу определить, вроде же все правильно!

Сообщение отредактировал Sosnovskij - 28.10.2014, 14:12
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 4.8.2014, 20:32; Ответить: ixman
Сообщение #2


header("Location: a.php"); сюда попробуйте полный URL до файла a.php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
hnerd
hnerd
Topic Starter сообщение 4.8.2014, 21:29; Ответить: hnerd
Сообщение #3


(Ixman @ 4.8.2014, 23:32) *

header("Location: a.php"); сюда попробуйте полный URL до файла a.php

Нет, она направляется на a.php, просто куки не сохраняет. А в a.php у меня условие,если кук нет, то направлять меня на страницу с формой:
if($username == null){
    header("Location: index.php");
}


Когда я вместо index.php подставила b.php(пустая страница, то она мне и открылась после того, как я в форму имя ввела.) Получается, что условие внизу на странице a.php не выполняется:
if(isset($_COOKIE['username'])){
    $username = $_COOKIE['username'];
}

А почему оно не выполняется я понять не могу. Куки у меня в браузере включены!


Сообщение отредактировал hnerd - 4.8.2014, 21:30
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 4.8.2014, 22:07; Ответить: fedornabilkin
Сообщение #4


Попробуй так:

$username = strval($_COOKIE['username']);
if(strlen($username) < 1){
header("Location: index.php");
}
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 4.8.2014, 22:35; Ответить: ixman
Сообщение #5


Вы попробуйте вывести кукис, ставиться он или нет. Ну и синтаксис тоже может быть проблемой

if(!empty($_POST)) {
$enter_site = Login($_POST['username']); 
}



Сообщение отредактировал Ixman - 4.8.2014, 22:36
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
hnerd
hnerd
Topic Starter сообщение 5.8.2014, 13:10; Ответить: hnerd
Сообщение #6


(Ixman @ 5.8.2014, 01:35) *


Вы попробуйте вывести кукис, ставиться он или нет. Ну и синтаксис тоже может быть проблемой

if(!empty($_POST)) {
$enter_site = Login($_POST['username']); 
}



Спасибо, что вы мне помогаете!

Куки ставятся!

когда я на страницу index.php в этот код
setcookie('username', $username, time() + 3600 * 24 * 7);
вместо $username вставила "маша" вот так:
setcookie('username', "маша", time() + 3600 * 24 * 7); ,

то у меня вошел на страницу a.php! И на странице a.php в этом коде:

Вы вошли как <b><?php echo $username; ?></b> |
        <a href="index.php">Выход</a>


вместо $username подставилось "маша". и все получилось! (ну это и понятно)

rORK5aGXlPM.jpg
Получается, что куки у меня сохраняются.

Тогда я подумала, что не передается значение $_POST['username'] из формы и решила проверить:
1. на странице index.php этот код пока скрыла от интерпретации php:

/*if(!empty($_POST))
    $enter_site = Login($_POST['username']);

if($enter_site){
    header("Location: a.php");
    exit();

}*/

После этого я написала такие строчки, чтобы проверить сохраняются ли значения в массиве пост:
$enter_site = $_POST['username'];
echo $enter_site;


Значения сохраняются! Я перезагрузила страницу, ввела в форму "Простоеимя" и нажала войти и вот, что у меня открылось:
R4kT42jUHrA.jpg
То есть получается куки читаются и проверка на странице a.php работает, в массив $_POST тоже значения сохраняются, а сайт все-равно перенаправляет на страницу index.php, когда я ввожу значение в форму!

Значит проблема в этой функции:

function Login($username){
    if($username = '')
        return false;

        setcookie('username', $username, time() + 3600 * 24 * 7);
    return true;
}


Я проверила, выводит ли функция "true" в переменную $enter_site здесь:
if(count($_POST) > 0)
    $enter_site = Login($_POST['username']);


вывела
echo $enter_site;

Ответ оказался: "1", значит true. Значит выводит. Больше я не знаю, в чем же все-таки проблема!

Я просто в отчаянии! В чем же тогда проблема!


Сообщение отредактировал hnerd - 5.8.2014, 13:19
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 5.8.2014, 14:10; Ответить: fedornabilkin
Сообщение #7


Если честно, у тебя в корне не верная концепция.
Юзеры никуда не сохраняются и может так получиться, что с логином fedornabilkin будут одновременно присутствовать несколько пользователей. Логин должен быть уникален и куда-то записан. Обычно в БД.
Помимо этого, зачем тебе вообще нужны эти две функции?
И обычно авторизацию делают на сессиях. Не помню уже почему, но меня убедили. что сессии правильнее использовать в таком случае.
Например так:

session_start();

// если передан пост-запрос с параметром, то сохраняем значение этого параметра в сессию и перенаправляем на страницу
$username = strval($_POST['username']);
if($username){
$_SESSION['username'] = $username;
header("Location: a.php");
exit();
}


// если есть сессия, то юзер авторизован
$username = $_SESSION['username'];
if($username){
header("Location: a.php");
exit();
}

// на странице выхода
unset($_SESSION['username']); // разрегистрировали переменную



Сообщение отредактировал fedornabilkin - 5.8.2014, 14:12
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 5.8.2014, 14:15; Ответить: ixman
Сообщение #8


Чуть позже реализую ваш код на локалке и посмотрю что там не так
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 5.8.2014, 14:37; Ответить: fedornabilkin
Сообщение #9


Посмотри вот этот файл. Сам писал, сам проверял. Все гораздо проще.
http://zaka4ano.ru/3444


Сообщение отредактировал fedornabilkin - 5.8.2014, 15:14
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 5.8.2014, 15:45; Ответить: ixman
Сообщение #10


У меня cookie не ставиться )) с этого скрипта и немного менял код, всё равно не работает
Одно могу сказать, почему-то печенька постоянно удаляется, почему я так и не понял 
http://prntscr.com/49r26e
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужен кодер, чтобы пофиксить ошибку Wordpress после переноса сайта
0 Alex-777 814 7.4.2024, 18:05
автор: Alex-777
Открытая тема (нет новых ответов) Через какой браузер и как можно найти в кэшэ браузера видео
10 Room 2280 23.3.2024, 7:41
автор: Room
Открытая тема (нет новых ответов) Помогите вспомнить рекламного бота Телеграм для обмена рекламой
0 Mixatraider 725 21.2.2024, 23:42
автор: Mixatraider
Открытая тема (нет новых ответов) Помогите рещить проблему с монитором.
Почему низкое разрешение при подключении монитора через displayport?
0 Levels 1701 11.12.2020, 0:48
автор: Levels
Открытая тема (нет новых ответов) Помогите кто нибудь получить партнерку Росбанк!
7 heisenberg_mw 2340 7.8.2020, 9:28
автор: heisenberg_mw


 



RSS Текстовая версия Сейчас: 18.4.2024, 10:14
Дизайн