Перейти к содержимому

Сервис обмена электронных валют


Помогите найти ошибку в куки!

#1 hnerd

hnerd
  • Пользователь
  • 284 сообщений
  • Репутация: 18
0

Отправлено 04 Август 2014 - 16:50

<?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 Октябрь 2014 - 13:12

  • 0

#2 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 04 Август 2014 - 19:32

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

#3 hnerd

hnerd
    Topic Starter
  • Пользователь
  • 284 сообщений
  • Репутация: 18

Отправлено 04 Август 2014 - 20:29

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: 04 Август 2014 - 20:30

  • 0

#4 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 04 Август 2014 - 21:07

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

$username = strval($_COOKIE['username']);
if(strlen($username) < 1){
    header("Location: index.php");
}

  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#5 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 04 Август 2014 - 21:35

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

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

Сообщение отредактировал Ixman: 04 Август 2014 - 21:36

  • 0

#6 hnerd

hnerd
    Topic Starter
  • Пользователь
  • 284 сообщений
  • Репутация: 18

Отправлено 05 Август 2014 - 12:10

 

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

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: 05 Август 2014 - 12:19

  • 0

#7 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 05 Август 2014 - 13:10

Если честно, у тебя в корне не верная концепция.

Юзеры никуда не сохраняются и может так получиться, что с логином 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: 05 Август 2014 - 13:12

  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#8 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 05 Август 2014 - 13:15

Чуть позже реализую ваш код на локалке и посмотрю что там не так


  • 0

#9 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 05 Август 2014 - 13:37

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

http://zaka4ano.ru/3444


Сообщение отредактировал fedornabilkin: 05 Август 2014 - 14:14

  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#10 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 05 Август 2014 - 14:45

У меня cookie не ставиться )) с этого скрипта и немного менял код, всё равно не работает


Одно могу сказать, почему-то печенька постоянно удаляется, почему я так и не понял 

http://prntscr.com/49r26e


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru