2012-10-07 96 views
0

對於少量的信息我很遺憾,但是我可以給你的東西並不多。問題是,當試圖擴展我的登錄功能以添加一個保持登錄的選項時,Cookie不會設置。會議本身的作品(所以沒有空白字符或東西)。我沒有收到任何錯誤消息,該cookie只是沒有設置(使用opera/firefox進行測試)。在困惑了一個多小時之後,我決定在這裏問問。以下是登錄功能。再往下看,你會發現它是如何被調用的。不要擔心cookie中的密碼,它會被散列。我測試了代碼是否被實際執行(在setcookie之前放置了一個echo'abc')。Cookies不會設置,會話有效

public function login($password,$stayloggedin) { 
if (is_null($this->id)) trigger_error ("user::login(): Attempt to login an user object that does not have its ID property set.", E_USER_ERROR); 

if ($this->compare_password($password)) 
{ 

    if ($stayloggedin) 
    { 
     setcookie("userid", $this->id, time()+3600); 
     setcookie("userid", $this->password, time()+3600); 
    } 

    session_start(); 
    $_SESSION['user_id'] = $this->id; 
    $_SESSION['user_name'] = $this->name; 
    $_SESSION['user_nummer'] = $this->user_nummer; 
    return true; 
} 
else 
{ 
    return false; //wrong password 
} 

} 

這是如何調用上述函數的。

<?php 
header('Content-type: text/html; charset=UTF-8'); 
require_once 'required_script.php'; 
if (isset($_GET['login'])) 
{ 

    require_once CLASS_PATH.'user.class.php'; 

    $user_logging_in=new user(); 
    $user_logging_in->load_from_name($_POST['user_name']); 
    if (isset($user_logging_in->id)) 
    { 
     if ($user_logging_in->login($_POST['user_pass'],$_POST['remember_me']=='true')) 
     { 
      echo '1'; 
     } 
     else 
     { 
      echo '0'; 
     } 
    } 
    else 
    { 
     echo '2'; 
    } 
die; 
} 

非常感謝。

+1

我會嘗試使用下一個兩個參數的'setcookie' – thewebguy

+0

謝謝,這實際上解決了這個問題。你能解釋一下爲什麼?並請將其重新發布爲答案,以便我可以給您適當的信用。 – Boelensman1

+0

我現在明白了爲什麼。登錄發生在/後端,cookie檢入正常目錄。所以這個cookie只被設置爲/後端。非常感謝:) – Boelensman1

回答

1

您的cookie不會設置,因爲您在登錄/ cookie設置功能發生之前正在輸出HTML標頭。

在創建cookie之前,您無法將任何標頭傳遞給瀏覽器。