使用会话变量跟踪页面以进行重定向

时间:2012-08-27 07:55:28

标签: php session-variables

我目前正在使用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");       
            }
}

LoginSuccess.php

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

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

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

2 个答案:

答案 0 :(得分:1)

您有一些错误:

  1. 有效标头是header('Location: http://www.example.org/script.php');通知L和完整网址?
  2. 每个header('Location: http://www.example.org/script.php');之后应该是exit();
  3. 您不能仅仅依靠$_COOKIE['username'],您需要输入密码,我的意思不是密码,也可能是MD5()中的$_COOKIE哈希密码。你应该知道不要那么依赖$_COOKIE
  4. LoginSuccess.php中,您必须在重定向之前unset($_SESSION['addForm']),仍然会设置来自会话的addForm

答案 1 :(得分:1)

Personnaly,我更喜欢在会话变量中存储条目当前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
    }

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