这个登录代码是否正确,因为它似乎不起作用

时间:2014-06-09 04:10:53

标签: php session redirect isset

<?php

    include_once '../../includes/dbconnect.php';

    if (isset($_SESSION['username'])) {
    header('Location: ../../-/ucp/index2.php');
    }

?>

当我登录时,它不会将我重定向到该页面index2.php&amp;当用户名存储在会话中时。会话已经通过文件session_start()中的dbconnect.php启动,该文件包含在脚本的开头。

出了什么问题?

1 个答案:

答案 0 :(得分:1)

这没有任何意义:

header('Location: ../../-/ucp/index2.php');

也许您应该将其更改为完整的网址,如下所示:

header('Location: http://your.great.site/-/ucp/index2.php');

../../-/ucp/index2.php没有意义的原因是浏览器会将../../解释为您所处的任何网址应该下降到两个级别的路径......但是你是100%确定有一个放2级?完整的URL是可行的方法。

此外,您的代码中存在一个更大的问题,即您依赖相对路径,这不是一个好习惯。它可以绊倒你 - 就像它在这里一样 - 并且避免它的最好方法是在主配置中设置一个基本路径。

所以你可以在配置文件中设置这样的东西:

$BASE_PATH = '/full/path/to/your/codebase/here/';

如果您不知道文件系统基本路径是什么,只需将这行代码放在PHP代码中;比如index.php

echo "Your path is: " . realpath(dirname(__FILE__)) . "<br />";

然后加载该页面。靠近顶部的地方将是这个文本:

Your path is: /full/path/to/your/codebase/here/

然后使用该集,您可以将代码更改为:

<?php

    include_once '../../includes/config.php';
    include_once $BASE_PATH . 'includes/dbconnect.php';

    if (isset($_SESSION['username'])) {
    header('Location: ../../-/ucp/index2.php');
    }

?>

是的,设置通过相对路径加载config.php,然后在下一行使用$BASE_PATH似乎更有效,但好处是那些/includes/config.php线条设置,你不再需要担心它。然后可以设置$BASE_PATH以满足您所处的任何设置的需要。

那说,如何设置$BASE_URL呢?像这样:

$BASE_URL = 'http://your.great.site/';

那么你可以在代码中执行此操作:

<?php

    include_once '../../includes/config.php';
    include_once $BASE_PATH . 'includes/dbconnect.php';

    if (isset($_SESSION['username'])) {
    header('Location: ' . $BASE_URL . 'ucp/index2.php');
    }

?>

这样你的基本设置都集中在一个地方,你只需编码而不会被相对路径或URL废话脱轨,并继续生活!