2016-06-13 3 views
0

Привет Я пытаюсь извлечь файл cookie, который я успешно создал, и сравнить его с строкой.Использование файлов cookie для проверки, если вы вошли в систему

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

В принципе, если он говорит «да», он просто покажет мне страницу, и если либо нет файла cookie, либо установлен на нет, он перенаправит меня на логин.

Я пытаюсь использовать PHP. Это то, что я пробовал.

<?php 
     $value = "Yes"; 
     if(isset($_COOKIE['user']) && $_COOKIE['user'] == $value) 
     { 
?> 

<!------- HTML code goes here -------> 

<?php 

     } 
     else{ 
      $cookie_name = "user"; 
      $cookie_value = "No"; 
      setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
      header("Location: index1.html"); 
     } 

?> 

Это php, на который я звоню, чтобы в основном проверить данные, введенные с помощью базы данных SQL.

<?php 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $conn = mysqli_connect("localhost", "root", "", "accounts"); 
    if (mysqli_connect_errno()){ 
     echo "Error: Could not connect to database. Please try again later"; 
     exit; 
    } 

    $query="SELECT * FROM accounts WHERE username='$username' AND password='$password'"; 

    $result = mysqli_query($conn, $query) 
    or die("Error in query: ". mysqli_error($conn)); 

    $number_of_rows = mysqli_num_rows($result); 

    if($number_of_rows == 1){ 
     $cookie_name = "user"; 
     $cookie_value = "Yes"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day 

     header("Location: main.html"); 
     exit; 
    } 
    else{ 
     $cookie_name = "user"; 
     $cookie_value = "No"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day 
     header("Location: index2.html"); 
    } 
?> 

Может кто-нибудь помочь мне разобраться, как это сделать? Я попробовал другой код, а также попробовал сеансы, но не повезло. Я успешно сохранил файл cookie, но не могу решить эту часть.

Благодаря

+0

вы можете сделать сеанс вместо печенья? – maria

+0

Это очень плохая идея, каждый может установить этот файл cookie вручную и притвориться, что вы вошли в систему на своем сайте. Для этого вы должны использовать сеанс. – jeroen

+0

Вы установили значение cookie в значение «Нет», но вы пытаетесь проверить «Да»? Могу я узнать почему? –

ответ

0

Session является лучшим вариантом, но если вы хотите использовать куки, то попробуйте этот

<?php 

    } 
    else{ 
    $cookie_name = "user"; 
     $cookie_value = "No"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
     ?> 
     <a href="index1.html">Reload the page</a> 
     <?php 
    } 

?> 
0

Вместо того, чтобы использовать Cookie, сервер использует Sided сеанс для этого :)

<?php 
    $value = "Yes"; 
    if(isset($_COOKIE['user']) && $_COOKIE['user'] == $value) 
    { 
?> 

будет что-то вроде:

<?php 
$value = 'yes'; 

if (isset($_SESSION['user'])) { 
    if ($_SESSION['user'] == $value) { 
     do something.. 
    } 
} 

и

<?php 

    } 
    else{ 
    $cookie_name = "user"; 
     $cookie_value = "No"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
     header("Location: index1.html"); 
    } 

?> 

будет:

<?php 

    } 
    else{ 
    $cookie_name = "user"; 
     $cookie_value = "No"; 
     $_SESSION[$cookie_name] = $cookie_value; 
     header("Location: index1.html"); 
    } 

?> 

Всего код:

 <?php 
$value = 'yes'; 

if (isset($_SESSION['user'])) { 
    if ($_SESSION['user'] == $value) { 
     do something.. 
    } 
} else{ 
     $cookie_name = "user"; 
      $cookie_value = "No"; 
      $_SESSION[$cookie_name] = $cookie_value; 
      header("Location: index1.html"); 
     } 

?> 
+0

эй я попробовал применить этот код, но как только я удалю сеанс с консоли отладки, он все еще остается на странице. –

+0

@ LukeCassar вам нужно использовать 'session_start()' в верхней части страницы PHP, на что ответ не упоминается. Мария должна добавить это к своему ответу как прозревание, так как без него сеансы никогда не будут существовать. – Martin

+0

да с кодом, я добавил сессию в php-код, который я только что добавил, это правильно? –

0

Использование 'Сервер сторонними сессий', как @maria государств, будет использовать много памяти от ваши серверные ресурсы. Избегайте использования $ _SESSION на веб-страницах всякий раз, когда можете.

Используйте это, и прочитать значения куки на странице загрузки, чтобы ваш сайт быстро & сухой:

if(isset($_COOKIE['user']) { 
    // Save the session_id in the cookie to do your stuff in cookie data. Use explode for multiple values in the cookie. 
    // check the session_id in the cookie on every page load 
    // when not available, recheck, and reset the cookie 
} 
Смежные вопросы