печенье не будет установлен - PullRequest
0 голосов
/ 19 июня 2011

Это вопрос относительно моего старого: cookie не будет сброшен: cookie не сбрасывается где у меня были проблемы с удалением куки (но он был установлен 'правильно'),

Теперь, когда проблема решена; похоже, что cookie не УСТАНАВЛИВАЕТ

cookie 'set': (не работает)

setcookie("id",$data['id'], time()+3600*24*30,'/');
setcookie("alias",$data['nombre'], time()+3600*24*30,'/');

проверка файлов cookie: (похоже, работает)

    function sesion(){

    if(isset($_COOKIE['id']) && isset($_COOKIE['alias'])){
                    $_SESSION['logueado'] = true;
                    $_SESSION['id'] = $_COOKIE['id'];
                    $_SESSION['alias'] = $_COOKIE['alias'];

                    return true;  //THIS IS NEVER RETURNING TRUE
                }
if(isset($_SESSION['id']) && isset($_SESSION['logueado']) && $_SESSION['logueado'] == true){

                    return true;
                }
                 else{ return false;
    }



    }

cookie не установлено: (работает)

function cerrar_sesion(){
  session_start();
  $_SESSION['logueado']= false;
  $_SESSION['id']= NULL;
  session_unset();
  session_destroy();
  setcookie("id",false,time()-3600,"/");
  setcookie("alias",false,time()-3600,"/");
  unset($_COOKIE['id']);
  unset($_COOKIE['alias']);
}

В результате вход в систему работает только через $ _SESSION, поэтому после 30 минут бездействия пользователь больше не входит в систему,

Есть идеи, что я делаю не так? Большое спасибо!

Ответы [ 5 ]

6 голосов
/ 24 июля 2011

Как указано выше, вы не можете прочитать cookie с той же страницы, на которой он установлен.Я вижу, что вы пытались обмануть это с помощью ajax, но я не верю, что это было бы допустимым трюком, поскольку вызовы Ajax не изменяют состояние страницы, на которой вы все еще находитесь.так что вы можете либо выполнить полное обновление, либо перенаправить ИЛИ одновременно с использованием setcookie, вы также можете определить нужные значения в $ _COOKIE, чтобы он был доступен на той же странице.как это:

setcookie("id",$data['id'], time()+3600*24*30,'/');
setcookie("alias",$data['nombre'], time()+3600*24*30,'/');
$_COOKIE['id'] = $data['id'];  
$_COOKIE['alias'] = $data['nombre'];
2 голосов
/ 19 июня 2011

набор строк cookie отлично работает со мной.

как для }else if(isset($_COOKIE['id']) && i так как вы вернетесь, если удалите else здесь, все в порядке, если не было возврата выше, вам придется оставить здесь else, чтобы не оценивать этот блок Вообще говоря, я не уверен, что elseif одинаково с else if во всех случаях

Способ построения сеанса функции будет выглядеть следующим образом:

  • При первой загрузке он покажет: ни куки, ни сессии, потому что вы не можете видеть куки до перезагрузки (что, я думаю, вы уже знаете). -При второй загрузке вы увидите cookie сессионный набор. - после второй загрузки, которую вы всегда видите, сессия установлена.

Все, что я хочу сказать, это то, что сессия работает точно так, как ожидается, поэтому я не вижу никаких проблем.

<?php

$data='Hello'; 
setcookie("id",$data['id'], time()+3600*24*30,'/');
setcookie("alias",$data['nombre'], time()+3600*24*30,'/');

session_start(); 

function sesion()
     {

        if(isset($_SESSION['id']) && isset($_SESSION['logueado']) 
            && $_SESSION['logueado'] == true)
        {
            echo 'SESSION IS SET<br>';
            return true;
        } 
        if(isset($_COOKIE['id']) && isset($_COOKIE['alias']))
        {
            $_SESSION['logueado'] = true;
            $_SESSION['id'] = $_COOKIE['id'];
            $_SESSION['alias'] = $_COOKIE['alias'];
            echo 'COOKIE is alive and session set'.$_SESSION['alias'].'<br>';
            return true;  //THIS IS NEVER RETURNING TRUE
         }
        else
        {  
            echo 'NO SESSION,   NO COOKIE YET, WAIT UNTIL REFRESH<br>';
            return false;
        } 
} 
 sesion() ; 
?>
1 голос
/ 27 июля 2011

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

Просто попробуйте:

error_reporting(E_ALL);

Вы наверняка увидите на своей странице что-то вроде "Не могуизменить заголовки. Заголовки уже отправлены ".Это потому, что вам нужно установить куки, прежде чем отображать что-либо на своей странице.Таким образом, решение для решения вашей проблемы состоит в том, чтобы внедрить ваш код в SET cookie в нижней части вашей страницы или использовать ob_start / ob_clean.

Дайте мне знать, если это поможет:)

1 голос
/ 23 июля 2011

Попробуйте удалить параметр пути из ваших вызовов setcookie (), возможно, в этом проблема.

Кроме того, вы проверяли, что $ data на самом деле содержит какие-либо данные?

0 голосов
/ 22 июля 2011

В соответствии с реализацией " setcookie () " в PHP, проверка значения cookie не будет работать, пока вы не переместите элемент управления со страницы, где вы создаете cookie. Таким образом, ваш «SET» будет создавать cookie на одной странице, и «sesion ()» следует вызывать с другой страницы, чтобы проверить значение cookie, которое вы установили. Попробуйте и надеюсь, что это поможет!

Попробуйте следующий подход (уточните это в соответствии с вашими потребностями). Я пытаюсь обновить саму страницу после установки cookie, и функция «sesion ()» является динамической функцией, которая может иметь или не иметь никаких аргументов. Таким образом, когда вы передаете какой-либо аргумент, cookie будет установлен, в противном случае он будет проверен на наличие. Сопутствующей функцией с func_num_args () является func_get_args () . Это поможет вам санировать ожидаемые аргументы в функции.

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
ini_set("log_errors", 0);

session_start();

function sesion(){
  // func_num_args() number of arguments passed to the function
  if (func_num_args() == 0) { // if no arguments were passed, means the page is refreshed and cookie won't be set further
    if(isset($_COOKIE['id']) && isset($_COOKIE['alias'])){
      $_SESSION['logueado'] = true;
      $_SESSION['id'] = $_COOKIE['id'];
      $_SESSION['alias'] = $_COOKIE['alias'];

      return true;  //THIS IS NEVER RETURNING TRUE
    }
    if(isset($_SESSION['id']) && isset($_SESSION['logueado']) && $_SESSION['logueado'] == true){
      return true;
    }
    else {
      return false;
    }
  }
  else { // if number of args > 0, means you need to cookie here and refresh the page itself
    global $data; // set this to global as the $data will be available outside of this function
    setcookie("id",$data['id'], time()+3600*24*30,'/');
    setcookie("alias",$data['nombre'], time()+3600*24*30,'/');
    /**
     * refresh the page by javascript instead of header()
     * as header already being sent by the session_start()
     */
    echo '<script language="javascript">
    <!--
    window.location.replace("' . $_SERVER['PHP_SELF'] . '");
    //-->
    </script>';
    die();
  }
}

sesion(1); // passed an argument to set the cookie
?>

Я думаю, что у вас возникнут проблемы с разделом JavaScript, так как он изменит URL страницы, и я предполагаю, что вы пытаетесь включить этот скрипт в страницы. Итак, я воспользуюсь помощью call_user_func () и последняя часть «else» после строк setcookie () будет изменена на следующую строку:

call_user_func("sesion");

Надеюсь, теперь это будет иметь смысл.

...