2012-10-19 39 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