Dziwna sprawa z ciasteczkami

0

Mam klasę:

<?php

  class User
  {
    var $cookie_time;
    var $cookie_name;
    var $cookie_path;
    var $cookie_domain;
    var $cookie_secure;
    var $template;
    var $type;
    var $ip;
    var $host;
    var $agent;

    function User() {
      global $Config;
      $this->cookie_time = time() + 60 * 60 * 24 * 180;
      $this->cookie_name = $Config['cookie_prefix'] . "session";
      $this->cookie_path = $Config['cookie_path'];
      $this->cookie_domain = $Config['cookie_domain'];
      $this->cookie_secure = $Config['cookie_secure'];
      if( $this->_get_cookie( $Config['cookie_prefix'] . "session" ) ) {
        session_id( $_COOKIE[$Config['cookie_prefix'] . 'session'] );
        session_start(); 
      } else {
        session_start();
        $this->template = $Config['template'];
        $this->type = USER_ANONYMOUS;
      }
      $this->ip = $this->_get_user_ip();
      $this->host = gethostbyaddr( $this->ip );
      $_SESSION['template'] = $this->template;
    }

    function _get_cookie( $value ) {
      if( isset( $_COOKIE[$value] ) ) {
        return $_COOKIE[$value];
      } else {
        return "";
      }
    }

    function _get_user_ip () {
      if( isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {
        return $_SERVER["HTTP_X_FORWARDED_FOR"];
      } else {
        return $_SERVER['REMOTE_ADDR'];
      }
    }

    function save_user_data() {
      setcookie( $this->cookie_name, session_id(), $this->cookie_time, $this->cookie_path, $this->cookie_domain, $this->cookie_secure );
      echo $this->cookie_name . "<br>";
      echo session_id() . "<br>";
      echo $this->cookie_time . "<br>";
      echo $this->cookie_path . "<br>";
      echo $this->cookie_domain . "<br>";
      echo $this->cookie_secure . "<br>";
    } 
  }	
?>

a tablica $Config wygląda tak:

$Config['cookie_prefix'] = "main_";
$Config['cookie_path'] = "/";
$Config['cookie_domain'] = "localhost";
$Config['cookie_secure'] = 0;

Problem jest następujący: po wywołaniu f-cji save_user_data(); ciasteczko się nie zapisuje, lecz gdy zastąpię tą linijkę:

$this->cookie_domain = $Config['cookie_domain'];

na:

$this->cookie_domain = "localhost";//$Config['cookie_domain'];

to ciasteczko się zapisuje. Więc o co chodzi?? Dlaczego jeśli informacja o domenie jest pobierana z tablicy to wtedy występuje błąd i ciasteczko się nie zapisuje??

0
  • jaki błąd wyskakuje
  • co się pojawia jak dasz echo na tą zmienną
  • czy do usera mimo wszystko leci nagłówek z ciastkiem (tyle że jest źle interpretowane i w rezultacie ignorowane)
  • czy możesz zmienić nazwę tablicy Config - może ma jakiś konflikt z php, i nazwy zmiennych w klasie tak żeby nie miały identycznej nazwy jak te z tej tablicy, np z dodaniem jdnej literki przed tym dla rozróżnienia

?

0
Adamo napisał(a)
  • jaki błąd wyskakuje
  • co się pojawia jak dasz echo na tą zmienną
  • czy do usera mimo wszystko leci nagłówek z ciastkiem (tyle że jest źle interpretowane i w rezultacie ignorowane)
  • czy możesz zmienić nazwę tablicy Config - może ma jakiś konflikt z php, i nazwy zmiennych w klasie tak żeby nie miały identycznej nazwy jak te z tej tablicy, np z dodaniem jdnej literki przed tym dla rozróżnienia

?

ad1: żadnego błedu nie ma (php nic nie alarmuje, error_reporting( E_ALL ); ), tylko samo ciasteczko na kompie usera się nie zapisuje.
ad2: wszystko tak jak powinno czyli nazwa domeny
ad3: tak na 100% leci nagłowek bo jak usune informacje o domenie (czyli $this->cookie_domain ustawie ręcznie w klasie lub dam puste) to ciasteczko się zapisuje.
ad4: taki sam rezulatat.

Generalnie problem jest z pobraniem domeny z tablicy konfiguracyjnej $Config bo gdy w samej klasie przypiszę nazwe domeny:

$this->cookie_domain = "localhost";

to wszystko działa i ciasteczko się zapisuje, lecz gdy domena ma być pobrana z tablicy konfiguracujnej to już ciacho nie chce się zapisywać.

A domena musi być pobierana z tablicy konfiguracyjnej bo system będzie obsługiwał 5 subdomen no i każdy musi mieć możliwość logowania się tylko w swojej subdomenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1