2012-10-19 61 views
3

我非常沮喪,我無法使其工作。我已經嘗試了幾種不同的方法來解決這個問題,並且從所有的例子和代碼中我已經讀到了這個應該可以工作,但事實並非如此。獲取導致錯誤的Cookie 00

2012-10-19 19:24:04.533 192.168.1.62 "-" "WEBMATRIX" "-" 192.168.1.62 POST /Actions/NewTicket.php - 500 0 6149 688 45 -11640 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4" "QCUserID=1" "http://192.168.1.62:53896/NewTicketPage.html" "-" "192.168.1.62:53896" 0 

WebMatrix中/動作/ login.php中< - 這工作。我可以在Chrome瀏覽器中看到它。它看起來像是在日誌錯誤。

<?php 
//set vars 
require_once(__DIR__ . "/GlobalCookies.php"); 

GC_ClearCookie("QCUserID"); 
$user = $_POST['username']; 
$pass = $_POST['password']; 

require_once(__DIR__ . "/db.php"); 

$query = sprintf("SELECT * FROM users WHERE UserInitials='%s' AND UserPassword='%s'", mysql_real_escape_string($user),mysql_real_escape_string($pass)); 
$result = mysql_query($query); 
$rows = mysql_num_rows($result); 

if($rows!=0) 
{ 
    $row = mysql_fetch_row($result); 
    GC_SetCookie("QCUserID", $row[0]); 
    header("refresh:0;url=../DashboardPage.php"); 
} 
else 
{ 
    echo("User Not Found, redirecting to login page in 3 seconds"); 
    header("refresh:3;url=../index.php"); 
} 

?> 

WebMatrix中/動作/ GlobalCookies.php < - 奇怪的是,它沒有得到>在文件的結尾。我也沒擡一下如何做一個功能的文件,我只是複製其中一些來自Mantisbt。但是,如果我有它,並嘗試在login.php中使用它,它拋出一個錯誤500

<?php 
function GC_GetCookie($p_var_name, $p_default = null) 
{ 
    if(isset($_COOKIE[$p_var_name])) 
    { 
     $t_result = gpc_strip_slashes($_COOKIE[$p_var_name]); 
    } 
    else if(func_num_args() > 1) 
    { 
     //check for a default passed in (allowing null) 
     $t_result = $p_default; 
    } 
    else 
    { 
     error_parameters($p_var_name); 
     trigger_error(ERROR_GPC_VAR_NOT_FOUND, ERROR); 
    } 

    return $t_result; 
} 
function GC_SetCookie($p_name, $p_value, $p_httponly = true) 
{ 
    return setcookie($p_name, $p_value, 36000, "/"); 
} 
function GC_ClearCookie($p_name) 
{ 
    return setcookie($p_name, '', -1, "/"); 
} 

WebMatrix中/動作/ NewTicket.php < - 失敗

<?php 
error_reporting(-1); 

require_once(__DIR__ . "/db.php"); 
require_once(__DIR__ . "/GlobalCookies.php"); 

$serial = $_POST['serialNumber']; 
$model = $_POST['modelNumber']; 
$company = $_POST['companyName']; 
$special = $_POST['specialNote']; 
$userID = GC_GetCookie("QCUserID",1); //Error 500 here 
echo($userID."<br>"); 
?> 

這似乎是這樣一個簡單事情,但我一直在努力幾天..我在Google上的搜索沒有任何結果。謝謝你的時間....對於咯咯的笑聲,我試圖在IE瀏覽器上的另一臺計算機上,它的工作原理....奇怪。

+0

你可以從與50對應的錯誤日誌中發佈條目嗎? –

+1

'gpc_strip_slashes()'不是一個本地PHP函數,它來自Mantis,你沒有定義它。這可能是錯誤的原因。 –

+1

你有在任何地方定義的函數'gpc_strip_slashes'嗎?添加'error_reporting(E_ALL); ini_set('display_errors',1);'在PHP文件開始測試期間,它會告訴你錯誤消息,而不是通用的500頁。您也可以檢查服務器error_log文件中是否存在PHP錯誤的原因。 – drew010

回答

1

用於設置cookie時,請嘗試更改:

setcookie($p_name, $p_value, 36000, "/"); 

到:

setcookie($p_name, $p_value, time() + 36000, "/"); 

的原因是因爲到期參數是一個Unix時間戳,所以你必須添加當前時間,但是許多秒,你希望它過期英寸

您是否使用此cookie僅用於識別用戶是否登錄?如果是這樣,那麼我需要做的就是以不同的用戶身份登錄,只需創建一個具有適當名稱的cookie,並在這種情況下選擇一個隨機用戶標識。

+0

我想我需要休息一下,因爲有一次我的setcookie命令在他們的。謝謝你抓住那個...呃...好東西我不是一個巨大的新生物:/哦,等等,我是。 –

+0

我剛剛看到您對用戶標識的描述......如果您可以訪問我的Intranet,這是非常正確的。 :)我需要找到一個更好的方式來做到這一點。我發現的一件事是$ _SESSION []。我開始使用它,但有時候會讓我困惑一點。但這就是學習的全部內容,嘗試一些東西......然後嘗試其他的東西。謝謝你的回答 –

+0

是的,在這種情況下會議是你想要的。簡而言之,只要您在請求開始時調用了'session_start();',就可以讀取值並將其存儲在$ _SESSION數組中。只要瀏覽器發送的cookie與現有會話匹配,正確的數據就可以用於該請求。然後,您可以在服務器上存儲諸如$ _SESSION ['userid']'這樣的值,以便客戶端無法更改這些值,並且您將始終知道用戶標識以及該會話的人是否已登錄。 – drew010