PHP bir çocuk sınıf çerezleri ayarı

2 Cevap php

Ben bir özel oturum işleyicisi yazıyorum ve bana yaşam için bunu ayarlamak için bir çerez alınamıyor. Ben bir çerez ayarı ama hala çalışmıyor önce tarayıcıya şey çıktısı değilim. Onun beni öldürüyor.

Çerez bunu ayarlarsanız ben tanımlayan komut seti ile oturum işleyicisi arayacak. Gerekirse ben kod yayınlayacağız. Herhangi bir fikir insanlar?

<?php




/* require the needed classes comment out what is not needed */
require_once("classes/sessionmanager.php");
require_once("classes/template.php");
require_once("classes/database.php");


$title=" ";  //titlebar of the web browser
$description=" ";  
$keywords=" ";  //meta keywords
$menutype="default";  //default or customer, customer is elevated
$pagetitle="dflsfsf "; //title of the webpage
$pagebody=" ";  //body of the webpage


$template=template::def_instance();
$database=database::def_instance();

$session=sessionmanager::def_instance();
$session->sessions();
session_start();
?>

ve bu aslında oturum için çerez biridir

function write($session_id,$session_data)
{
    $session_id = mysql_real_escape_string($session_id);
    $session_data = mysql_real_escape_string(serialize($session_data));
    $expires = time() + 3600;
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $bol = FALSE;
    $time = time();
    $newsession = FALSE;
    $auth = FALSE;
    $query = "SELECT * FROM 'sessions' WHERE 'expires' > '$time'";
    $sessions_result = $this->query($query);
    $newsession = $this->newsession_check($session_id,$sessions_result);
    while($sessions_array = mysql_fetch_array($sessions_result) AND $auth = FALSE)
    {
        $session_array = $this->strip($session_array);
        $auth = $this->auth_check($session_array,$session_id);
    }

    /* this is an authentic session. build queries and update it */
    if($auth == TRUE AND $newsession == FALSE)
    {   
        $session_data = mysql_real_escape_string($session_data);
        $update_query1 = "UPDATE 'sessions' SET 'user_ip' = '$user_ip' WHERE 'session_id' = '$session_id'";
        $update_query2 = "UPDATE 'sessions' SET 'data' = '$session_data' WHERE 'session_id = '$session_id'";
        $update_query3 = "UPDATE 'sessions' SET 'expires' = '$expires' WHERE 'session_id' = '$session_id'";
        $this->query($update_query1);
        $this->query($update_query2);
        $this->query($update_query3);
        $bol = TRUE; 
    }
    elseif($newsession == TRUE)
    {
        /* this is a new session, build and create it */
        $random_number = $this->obtain_random();
        $cookieval = hash("sha512",$random_number);
        setcookie("rndn",$cookieval,$expires,'/');
        $query = "INSERT INTO sessions VALUES('$session_id','0','$user_ip','$random_number','$session_data','$expires')";
        $this->query($query);
        //echo $cookieval."this is the cookie <<";
        $bol = TRUE;    
    }
    return $bol;
}

kod güncellendi. hala şans

oturum yöneticisi başladıktan sonra herhangi bir html yankılandı ise nedense çerez html sonra denir. Bu bana hiç mantıklı değil

2 Cevap

setcookie() döner false php üstbilgi eklemek edemez. Yani hata ayıklama için gibi bir şey deneyin

 setcookie("rndn",$cookieval) or die('setcookie failed');

Sen setcookie () ilk etapta denir olmadığını bir test ile bu birleştirebilirsiniz

$rc = setcookie("rndn",$cookieval);
/* DEBUG-code don't forget to remove me */
error_log(sprintf("%s %s\n", date('Y-m-d H:i:s setcookie():'), $rc?'success':'failed'));

(Hatta daha iyi xdebug ve örneğin netbeans önyüz gibi gibi bir hata ayıklayıcı kullanabilirsiniz).

Eğer tarayıcınızda yanıt başlıklarını kontrol ettin mi? Örneğin yoluyla firebug extension. Belki istemci cookie başlığını alır ancak bunu kabul etmez.

Sorun if/else tablolara muhtemeldir. Kullandığınız:

if($auth = TRUE AND $newsession = FALSE)
...
elseif($newsession = TRUE)

Kullanımı, tek bir = Eğer assigning değerleri değil, comparing bunları olduğu anlamına gelir. Sen yerine == kullanmak gerekir =.

Bu değiştirin:

if($auth == TRUE AND $newsession == FALSE)
...
elseif($newsession == TRUE)

Eğer şu anda sahip kod ile, kod ilk if blok her zaman çalışacak, böylece setcookie() çağrı ulaştı asla.