【问题标题】:Getting cookies causing error 500获取导致错误 500 的 cookie
【发布时间】:2012-10-10 11:41:53
【问题描述】:

我感到非常沮丧,因为我无法让它发挥作用。我已经尝试了几种不同的方法,并且从我读过的所有示例和代码中,这应该可以工作,但事实并非如此。

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/Actions/login.php

<?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/Actions/GlobalCookies.php 。我没有查找如何执行函数文件,我只是从其中复制了一些螳螂。但如果我有它并尝试在 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/Actions/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 中尝试过它,它可以工作....奇怪。

【问题讨论】:

  • 你能把错误日志中与50对应的条目贴出来吗?
  • gpc_strip_slashes() 不是原生 PHP 函数,它来自 Mantis,您没有定义它。这可能是错误的原因。
  • 您是否在任何地方定义了函数gpc_strip_slashes?在测试期间在您的 PHP 文件的开头添加error_reporting(E_ALL); ini_set('display_errors', 1);,它将告诉您错误消息而不是通用的 500 页面。您还可以检查服务器 error_log 文件以了解 PHP 错误的原因。
  • @Pekka 我觉得很傻,我不敢相信我错过了。有趣的是,IE 似乎并不在意,并继续处理它。我摆脱了条形斜线,现在它在 chrome 中工作。谢谢大家。现在找出为什么它没有从 db 中提取正确的结果。
  • @RobertSnyder :) 感谢您发布详细的问题,+1 表示非常详尽,因此我们可以快速确定问题。至于 IE,它可能一直在使用缓存副本,使用默认设置非常糟糕。

标签: php google-chrome cookies


【解决方案1】:

要设置您的 cookie,请尝试更改:

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

到:

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

原因是因为过期参数是一个 Unix 时间戳,所以您必须将当前时间添加到您希望它过期的秒数。

您使用此 cookie 是否仅用于识别用户是否已登录?如果是这样,作为其他用户登录所需要做的就是创建一个具有适当名称的 cookie,并在这种情况下选择一个随机用户 ID。

【讨论】:

  • 我想我需要休息一下,因为有一次我的 setcookie 命令在他们的。谢谢你抓住那个......呃......幸好我不是一个巨大的新手:/哦等等,我是。
  • 我刚刚看到您所说的有关用户 ID 的内容...如果您可以访问我的内部网,您可以做到这一点。 :) 我确实需要找到更好的方法来做到这一点。我发现的一件事是 $_SESSION[]。我开始使用它一点点,但有时它让我有点困惑。但这就是学习的全部意义,尝试一些东西......然后尝试其他东西。谢谢你的回答
  • 是的,在这种情况下,会话就是您想要的。简而言之,只要您在请求开始时调用了session_start();,您就可以在$_SESSION 数组中读取和存储值。只要浏览器发送的 cookie 与现有会话匹配,该请求就可以使用正确的数据。然后,您可以在服务器上存储诸如 $_SESSION['userid'] 之类的值,这样它们就不能被客户端更改,并且您将始终知道用户 ID 以及该会话的人是否已登录。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2013-08-01
  • 2011-06-07
  • 2019-10-25
相关资源
最近更新 更多