0

我目前正在使用 SESSION 变量进行重定向。Hoprfully 代码片段将使其清楚。

addForm.php:

if (!isset($_SESSION['myusername'])){
            if (isset($_COOKIE['username'])){   
                $_SESSION['myusername'] = $_COOKIE['username'];

            }
        else{   
                #using a session var to redirect back to addForm.php
                $_SESSION['addForm'] = 1;
                header("location:loginForm.php");       
            }
}

登录成功.php

session_start();
if (!isset($_COOKIE['username'])){

    header("location:loginForm.php");
}
if (isset($_SESSION['addForm'])){
    header("location:addForm.php");
}

以上工作(重定向到addForm.php)。我的问题是,这样做有什么风险吗?有更好的方法吗?我想我正在寻找“最佳实践”。

4

2 回答 2

1

你有一些错误:

  1. 有效的标头是header('Location: http://www.example.org/script.php');通知L和完整的 URL?
  2. 每次header('Location: http://www.example.org/script.php');之后应该是exit();
  3. 您不能仅仅依靠$_COOKIE['username'],您需要从密码中获取一些信息,我的意思不是密码,也可能是MD5()哈希密码$_COOKIE。你应该知道不要那么依赖$_COOKIE
  4. LoginSuccess.php你必须unset($_SESSION['addForm'])重定向之前,addForm仍然会设置 from session。
于 2012-08-27T08:08:43.157 回答
1

个人而言,我更喜欢将条目当前 URI 存储在会话变量中。然后,当我的登录过程成功时,我使用存储的 URI 将用户重定向到上一页。

伪代码


    if (!isset($_SESSION['userloginobj'])) {
        $_SESSION['callbackuri'] = get_current_url_depending_of_your_process();
        header('location:' . get_base_url() . 'index.php?do=login');
        exit(0);
    }
    elseif ('login' == get_param('do')) {
        // Show the login form

        if ( is_login_successfull() ) {
             $_SESSION['userloginobj'] = "userinfo";
             header('location:' . $_SESSION['callbackurl']);
             exit(0);
        }
    }
    else {
        // Normal process
    }

但是,如果您不使用框架,您的流程似乎是一个好的开始。

于 2012-08-27T08:13:03.190 回答