Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用会话变量跟踪页面以进行重定向_Php_Session Variables - Fatal编程技术网

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

Php 使用会话变量跟踪页面以进行重定向,php,session-variables,Php,Session Variables,我当前正在使用会话变量进行重定向。充满希望的代码片段将使它变得清晰 addForm.php: if (!isset($_SESSION['myusername'])){ if (isset($_COOKIE['username'])){ $_SESSION['myusername'] = $_COOKIE['username']; } else{ #usi

我当前正在使用会话变量进行重定向。充满希望的代码片段将使它变得清晰

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");       
            }
}
loginsucess.php

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

    header("location:loginForm.php");
}
if (isset($_SESSION['addForm'])){
    header("location:addForm.php");
}
上述方法有效(重定向到addForm.php)。我的问题是,这样做有风险吗?有更好的方法吗?我想我在寻找“最佳实践”。

您有一些错误:

  • 有效标头为
    标头('位置:http://www.example.org/script.php');通知
    L
    和完整URL
  • 在每个
    标题('位置:http://www.example.org/script.php');应该是
    exit()
  • 你不能仅仅依赖于
    $\u COOKIE['username']
    ,你需要从密码中获得一些东西,我的意思是不是密码,也可能是
    $\u COOKIE中的哈希密码。你应该知道不要太依赖COOKIE
  • loginsucess.php
    中,您必须
    unset($\u SESSION['addForm'])
    在重定向之前,仍将设置来自SESSION的
    addForm

  • 个人而言,我更喜欢将条目当前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
        }
    

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

    对不起,我在随机刷新页面时丢失了问题位。现在修好了。谢谢你的提示。关于第1点。我可以使用“位置”而不是“位置”,没有错误。为什么会出现这种情况?这不是针对您的代码语言,而是针对浏览器。浏览器接收标题为
    位置
    。无论编程语言如何,标准都是作为标题的
    位置