php: устанавливать куки и получать их? - PullRequest
0 голосов
/ 01 апреля 2012

Я создаю систему входа в систему с помощью php, и когда я отправляю правильную информацию, она устанавливает cookie.действие формы отправляет на ту же страницу, на которой сверху есть проверка файлов cookie isset, но поскольку файлы cookie требуют обновления после их установки, вам нужно обновить страницу в другой раз, чтобы она могла заметить, что файлы cookie существуют.

какой обходной путь для этого?Вот мой код (где имя пользователя и пароль - «admin», просто как заполнитель. Когда система заработает, я получу значения из базы данных.)

<?php 
if(isset($_COOKIE['user']))
{ 
echo "Hello, administrator.<br />";
echo "<a href=?logout=yes>logout</a>";
if(isset($_GET['logout']))
{
    setcookie("user", $_POST['username'], time() - 3600); 
}
}
else
{
 if (isset($_POST['submit'])) 
 {
     if (($_POST['username']=="admin")&&($_POST['password']=="admin"))
     {
          setcookie("user", $_POST['username'], time() + 3600); 
     }
     else
     {
         echo "empty field or wrong user/pass.";
     }
 }
 else
 {
     echo "nothing submitted. show form.";
 }
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<table border="0"> 
<tr><td colspan=2><h1>Login</h1></td></tr> 
<tr><td>Username:</td><td> 
<input type="text" name="username" maxlength="40"> 
</td></tr> 
<tr><td>Password:</td><td> 
<input type="password" name="password" maxlength="50"> 
</td></tr> 
<tr><td colspan="2" align="right"> 
<input type="submit" name="submit" value="Login"> 
</td></tr> 
</table> 
</form> 

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Если вам абсолютно не нужно использовать собственный файл cookie, я бы предложил использовать вместо него глобальную переменную $ _SESSION. Данные $ _SESSION доступны, как только вы их установите. Но его более важной особенностью является то, что данные не хранятся на клиенте. Это означает, что пользователь никогда не сможет получить доступ к своим данным. Так что сложнее взломать вашу систему входа в систему. Как указали другие, с помощью куки-файлов любой может читать и редактировать данные!

session_start();

if (isset($_GET['logout']))
{
    unset($_SESSION['username']);
}
if ($_SESSION['username'] == 'admin')
{
    echo "hello admin!";
}
else if (($_POST['username']=="admin")&&($_POST['password']=="admin"))
{
     $_SESSION['username'] = $_POST['username'];
}

Чтобы использовать глобальные переменные $ _SESSION, вам нужно поставить session_start() в начале вашего скрипта (перед отправкой любых данных). Это должно решить вашу проблему перенаправления одновременно. Обратите внимание, что за кулисами $ _SESSION использует небольшой файл cookie, но вам не нужно об этом думать. Он содержит только маленький идентификатор.

больше информации о сеансе

http://www.php.net/manual/en/book.session.php

PS: если честно, я все равно использовал бы здесь редирект. Когда вы отправляете форму и нажимаете кнопку «Назад», браузер просит вас отправить данные еще раз, и это раздражает. Используя перенаправление с header("Location: " . $newUrl);, удалите это раздражение. Но только мои 2 цента.

0 голосов
/ 01 апреля 2012

Вы можете создать свою собственную функцию для установки файлов cookie, например:

function my_setcookie($name,$value,$expire){
    $_COOKIE[$name] = $value;
    return setcookie($name,$value,$expire);
}

Но лучшая идея - перенаправить пользователя после успешного запроса POST, поэтому, если страница обновляется, браузер не будет жаловатьсяо повторной отправке данных POST.

0 голосов
/ 01 апреля 2012
$loggedin = false;
if(isset($_POST['submit'])) {
 // Do login checking and set cookies
 $loggedin = true; // if the case
}else if(isset($_COOKIE['username']) && isset($_COOKIE['password'])) {
  // Check if valid login
  $loggedin = true; // if the case
}else{
  // They are not logged in.
}

Затем используйте проверяемый $ loggedin, чтобы проверить, вошли ли они в систему. Я предлагаю создать пользовательский класс, хотя и для этого, так что вы продолжаете использовать один и тот же код снова и снова в своих файлах.

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