【问题标题】:PHP Redirects, or cookies, not working on Godaddy, but working on localhostPHP 重定向或 cookie,不在 Godaddy 上工作,但在 localhost 上工作
【发布时间】:2014-11-04 18:52:29
【问题描述】:

所以我刚刚将我的 php 上传到 godaddy,除了正在工作的重定向现在已经停止。代码在实时服务器和离线服务器上的工作方式应该没有区别,所以我不明白发生了什么变化。

这是一个不起作用的代码示例

带有注销超链接的标题链接据我所知应该充当超链接

<div id="header">
           <div>
            <a href="index.php">Home</a> 
                <div id="loginreglink">
                <a href="Logout.php">Log Out</a>
                </div>
           </div>
          </div> 

实际的注销页面(logout.php)

<?php

require_once ('Connection.php');

header('Refresh: 0;');

            if (!isset($_COOKIE['Username'])){
                require ('LoginFunctions.inc.php');
                redirect_user();
            } else {
                setcookie('Username', '', time()-60*60*24*90, '/', '', 0, 0);
                require ('RedirectPage.php');
                redirect_user();
            }


?>

RedirectPage.php(访问注销页面后立即链接到的下一页)

<?php
            require ('index.php');
            redirect_user();
?>

然后立即链接回索引,但是应该注销用户。这不会发生。

发生的情况是页面重定向到索引(应该如此)大概使用以下序列,这让我认为重定向正在工作,但用户没有注销。 cookie 不会被删除。我真的不明白为什么它不是,因为它确实通过本地主机上的 netbeans 工作。

【问题讨论】:

  • redirect_user() 声明在哪里?
  • “代码在实时服务器和离线服务器上的工作方式应该没有区别”。我无法告诉你这是多么错误。
  • @MikeBrant 那么为什么不开始解释或将我链接到有帮助的东西呢?而不是试图让我感到愚蠢。我是新手,我知道,我的老师没用,所以我在自学,据我所知,到目前为止,我编写的所有代码在离线和离线时都是一样的,而且,到目前为止,我还没有看到(因为我还没有做过)任何代码工作方式不同的示例。
  • @Spratters53 两个不同的服务器,无论它们是本地的还是在某个托管公司的某个地方,都不应假定它们具有相似的环境,除非您以某种方式将它们设置为相似并且知道事实它们使用相同的 Web 服务器配置、安全设置、软件版本等运行。了解这些作为应用程序基础的各种软件依赖项是您真正需要随着时间和经验而学习的东西。我只是想消除所有环境都将表现相似的观念。
  • 您意识到您在“else”条件中调用了两次redirect_user()?您在包含的 REdirectPage.php 文件中调用它一次,然后在 else 条件中立即调用它。为什么是这样? redirect_user() 的代码是什么?

标签: php redirect cookies


【解决方案1】:

这很容易。取消设置 cookie。

if (!isset($_COOKIE['Username'])){
   require ('LoginFunctions.inc.php');
   redirect_user();
} else {
   setcookie('Username', '', time()-60*60*24*90, '/', '', 0, 0);
   require ('RedirectPage.php');
   //add this
   unset($_COOKIE['Username'];
   //or use setcookie and make the time to expire in the past and just put an empty value like
   $cookie_name = "Username";
   $cookie_value = "";
   $time = -3600;
   setcookie($cookie_name, $cookie_value, $time, "/");
   redirect_user();  
}

【讨论】:

  • 这很简单,有什么想法为什么在托管时需要取消设置的 cookie?
  • unset($_COOKIE['foo']) 不会从浏览器客户端中删除 cookie,而只是从 PHP 的内存中删除变量。您必须发送标头以使浏览器客户端上的 cookie 过期(通常通过 setcookie() 完成)。我确实认为如果你想让你的执行脚本在其余的执行过程中不受这个变量的影响,那么两者都做是很好的做法。
  • @MikeBrant 这工作了一段时间,但现在它没有正确取消设置 cookie。现在它似乎删除了 cookie,然后当我选择另一个页面时,它再次重置 cookie,而我没有尝试登录。但同样,这个问题只发生在托管网站上,而不是本地。
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 2019-06-16
相关资源
最近更新 更多