Cookie установлен, но не отображается на другой странице php - PullRequest
0 голосов
/ 29 июня 2019

У меня есть страница входа при входе в систему, страница процесса устанавливает файл cookie, и я хочу использовать этот файл cookie для автоматического входа в следующий раз.Cookie установлен в браузере, и я вижу его, но когда я хочу использовать его на странице входа, cookie пуст (файл в браузере все еще есть, и я вижу его)

Браузер: mozilla

Каталоги:

index.php (login page) --> in root /
include-function --> /functions/include-function.php
form-process.php --> /functions/form-process.php

Я включил выходную буферизацию php.ini

Примечание: это сообщение отредактировано после ответов

Это моя страница входа:

<?php
require("./functions/include-function.php");
 ?>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="./style/form.css">
<script type="text/javascript"src="./js/form.js">

</script>
<title></title>
</head>
<body>
<div class="wrapper">
<div class="container">
    <h1>Welcome</h1>

    <form class="form" method="get" action="./functions/form-process.php">
        <input type="text" placeholder="Username" name="username">
    <input type="text" placeholder="Username" name="username" value="<?php print_r($_COOKIE); ?>">

        <input type="password" placeholder="Password" name="password">
        <button type="submit" id="login-button" name="submit" value="submit">Login</button>
    </form>
    </div>

    <ul class="bg-bubbles">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    </ul>
    </div>
     </body>
     </html>

Это моя страница процесса:

<?php require("./include-function.php"); ?>
<?php
if (isset($_GET['submit'])) {
$username = $_GET['username'];
$pass = $_GET['password'];
$message = validation_form($_GET);
$value = 45;
$cookieName = "us";
if ($username == "vahid@gmail.com" && $pass == "123456" && empty($message)) {
 $expired = time() + (60 * 60 * 24 * 1);
 setcookie($cookieName,$value,$expired);
 // redirect_to("http://www.youtube.com/");
 print_r($_COOKIE);
}else{
  redirect_to("../index.php");
}
}
?>

, а это мой файл функции:

<?php
function redirect_to($location){
header("Location:". $location);
exit;
}

function  validation_form($value=[]){
$message = [];
// Field must not Empty
// trim() so empty space not count
$username =trim($value['username']);
$password =trim($value['password']);
if (!isset($username) || $username==="" || empty($username)
      || !isset($password) || $password==="" || empty($password)) {
      $message['validation'].="Username and Password must not empty";
}

// Length Check
$max = 20;
$min = 3;
if (strlen($username) > $max || strlen($password) > $max) {
  $message['validation'].= "Password Or Username Must not more than 20 character";
}
if (strlen($username) < $min || strlen($password) < $min) {
  $message['validation'].= "Password Or Username Must not less than 3 character";
}

// Type Check
if (!is_string($password)) {
  $message['validation'].= "Password Must be Number";
}

//Preg_match
if (!preg_match("/@/",$username)) {
  $message['validation'].= "Your username is your email ";
}
return $message;
}
?>

1 Ответ

0 голосов
/ 29 июня 2019

Так что, если я правильно понимаю, вы хотите создать страницу входа в систему , при которой при вводе имени пользователя и пароля вы в следующий раз обновите страницу, на которой вы уже вошли?или вы хотите создать форму sticky и сохранить значение, вставленное ранее?

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

Итак, прежде всего установите $ path ="/" и поместите его в качестве аргумента setcookie, чтобы сообщить браузеру: "отправлять куки на каждый сценарий в домене или поддомене"

Другой момент, как другие уже говорили вам в комментариях,этот setcookie изменяет заголовок, и все изменения заголовка должны быть выполнены перед любым выводом, и в вашем случае вы выводите пробел перед установкой cookie.Если вам нужно что-то вывести раньше, вы можете использовать функции буфера вывода , с помощью которых вы можете буферизовать весь вывод перед заголовком и отправлять его только после установки заголовка.

подробнеена https://www.php.net/manual/en/book.outcontrol.php.

Хотя я думаю, что вы делаете эту страницу для "try'n", не вводите подобный логин в реальном случае использования.Потому что вы передаете имя пользователя и пароль в http-запросе в удобочитаемом формате.Используйте php session и хэшированное поле в базе данных для эффективного и безопасного хранения данных клиента,
и для более легкого доступа к странице пользователя, сделайте липкимform , вставляя в значение поля значение в хранимой переменной, не печатая весь массив, в котором они хранятся.

Надеюсь, это может помочь!

...