php cookie не работает - PullRequest
       11

php cookie не работает

5 голосов
/ 24 апреля 2010

Я пытаюсь использовать куки с аутентификацией.

Эта страница работает после ввода пользователя и передачи

   <?
    if ((!$_POST[username]) || (!$_POST[password])) {
        header("Location: show_login.html");
        exit;
    }
    $db_name = "testDB";
    $table_name = "auth_users";
    $connection = @mysql_connect("localhost", "user", "pass") or die(mysql_error());
    $db = @mysql_select_db($db_name, $connection) or die(mysql_error());
    $sql = "SELECT * FROM $table_name WHERE username ='$_POST[username]' AND password = password('$_POST[password]')";
    $result = @mysql_query($sql, $connection) or die(mysql_error());
    $num = mysql_num_rows($result);
        if ($num != 0) {
            $cookie_name = "auth";
            $cookie_value = "ok";
            $cookie_expire = "0";
            $cookie_domain = "domain.com.au";
            setcookie($cookie_name, $cookis_value, $cookie_expire, "/", $cookie_domain, 0);
            $display_block = "
            <p><strong>Secret Menu:</strong></p>
            <ul>
                <li><a href=\"secretA.php\">secret page A</a>
                <li><a href=\"secretB.php\">secret page B</a>
            </ul>"; 
        } else {
            header("Location: show_login.html");
            exit;
        }
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Secret Area</title>
    </head>

    <body>
    <? echo "$display_block"; ?>


    </body>
    </html>

Когда я нажимаю на secretA.php или secretB.php, я перенаправлен для повторного входа в систему, он должен работать. вот код secretB.php

<?php

if ($_COOKIE[auth] == "ok") {
    $msg = "<p>Welcome to secret page B, authorised user! </P>";
} else {
    header( "Location: /show_login.html");
    exit;
}
?>
<HTML>
<HEAD>
<title>Secret Page B:</title>
</HEAD>
<BODY>

<? echo "$msg"; ?>

</BODY>
</HTML>

Ответы [ 5 ]

2 голосов
/ 25 ноября 2012

Вот кое-что, что могло вас испортить ...

setcookie($cookie_name,$cookis_value, $cookie_expire, "/", $cookie_domain, 0);

1 голос
/ 24 апреля 2010

Иногда это самое простое решение. То же самое случилось со мной. Я работал на localhost (wampserver). Я обнаружил, что мой брандмауэр блокирует все запросы файлов cookie от localhost. Я использовал ZoneAlarm в то время, но я предполагаю, что другие брандмауэры могут иметь тот же эффект Попробуйте отключить брандмауэр, чтобы убедиться, что он все еще не работает.

1 голос
/ 24 апреля 2010
try this :
   <?php
    if (isset($_POST['username']) and isset($_POST['password'])) 
    {

    $db_name = "testDB";
    $table_name = "auth_users";
    $connection = @mysql_connect("localhost", "user", "pass") or die(mysql_error());
    $db = @mysql_select_db($db_name, $connection) or die(mysql_error());
    $sql = "SELECT * FROM $table_name WHERE username ='".$_POST['username']."' AND password = password('".$_POST['password']."')";
    $result = @mysql_query($sql, $connection) or die(mysql_error());
    $num = mysql_num_rows($result);
        if ($num != 0) {
            $cookie_name = "auth";
            $cookie_value = "ok";
            $cookie_expire = "0";
            $cookie_domain = "domain.com.au";
            setcookie($cookie_name, $cookis_value, $cookie_expire, "/", $cookie_domain, 0);
            $display_block = "
            <p><strong>Secret Menu:</strong></p>
            <ul>
                <li><a href=\"secretA.php\">secret page A</a>
                <li><a href=\"secretB.php\">secret page B</a>
            </ul>"; 
        } else {
            header("Location: show_login.html");
            exit;
        };


    }
    else
    {
    header("Location: show_login.html");
    exit;
    };
1 голос
/ 24 апреля 2010

Это если отличный пример плохого кода.
Спасибо за публикацию. Многие люди могут читать и учиться на этом.

Позвольте мне объяснить.
PHP может помочь вам найти некоторые неясные ошибки. Не каждый, а некоторые из них.
Например, если вы неправильно набрали имя переменной, PHP выдаст ошибку ... конечно, если вы позволите PHP сказать.
Чтобы сделать каждую ошибку видимой, уровень сообщений об ошибках должен быть максимальным. Для этого каждый скрипт должен содержать следующую строку:

error_reporting(E_ALL);

после его добавления, если он был правильно написан, вы увидите только одно сообщение об ошибке, указывающее на опечатку. Но.
Вместо этого вы увидите водопад ошибок. Потому что PHP не может отличить преднамеренные ошибки от случайных.

Таким образом. В коде не должно быть преднамеренных ошибок, чтобы вы могли видеть случайные ошибки.
Это великий урок, который стоит запомнить.

Что это за ошибки?

  1. Строки в php ограничиваются кавычками.
    Итак, если у вас есть строка username, она должна быть записана как "username".
    И $ _POST [имя пользователя] становится $ _POST ["имя пользователя"].
    (и наоборот, переменные не нуждаются в кавычках, поэтому echo "$msg"; должно быть echo $msg;)
  2. все переменные должны быть установлены или проверены на наличие. поэтому,
    if ((!$_POST[username]) || (!$_POST[password])) {
    должно стать
    if (!empty($_POST["username"]) OR !empty($_POST["password"])) {

С таким кодом вы увидите только случайную ошибку и сможете исправить ее немедленно.

0 голосов
/ 30 октября 2012

Попробуйте установить cookie с помощью php следующим образом:

setcookie(<name>,<value>, time()+3600*24);

Иногда в localhost файлы cookie не устанавливаются с помощью: $_COOKIE[<name>] = <value>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...