使用PHP函数登录后重定向到请求的页面

使用PHP函数登录后重定向到请求的页面,php,redirect,Php,Redirect,我有一个函数,可以在登录页面中回显$\u SESSION值,并将$\u服务器['REQUEST\u URI']存储为另一页面上的$\u SESSION值,并且工作正常 但是我需要在所有产品页面中调用redirect\u after\u login函数,所以我只是在redirect\u after\u login 因此,我的function.php文件将显示以下链接 <?php session_start(); $key = ''; function redirect_after_log

我有一个函数,可以在登录页面中回显
$\u SESSION
值,并将
$\u服务器['REQUEST\u URI']
存储为另一页面上的
$\u SESSION
值,并且工作正常

但是我需要在所有产品页面中调用
redirect\u after\u login
函数,所以我只是在
redirect\u after\u login

因此,我的function.php文件将显示以下链接

<?php

session_start();
$key = '';

function redirect_after_login($value) {
if (!empty($value)) {
    echo $_SESSION['url'];
  } else {
      echo $_SESSION['url'] = $_SERVER['REQUEST_URI'];
  }
}

$activate_finction = $key == true ? 'Yes' : '';
$url = redirect_after_login($activate_finction);
$key.='login'有值

$activate_finction = $key == true ? 'Yes' : '';
$url = redirect_after_login($activate_finction);
函数现在用
==true
调用,所以我应该接收存储的值,但仍然得到
请求的url

我的问题是 在所有页面中,我得到
$\u会话['url']=$\u服务器['REQUEST\u URI']此值


如何获取会话值
login.php
,并且在所有产品页面中,函数应将
请求的url
存储为会话值。

我重构了代码,下面是一个完整的示例:

function.php:

<?php
    session_start();

    if (isset($_SERVER['HTTP_REFERER']) && basename($_SERVER['HTTP_REFERER']) != basename($_SERVER['PHP_SELF'])) {
        $_SESSION['url'] = $_SERVER['HTTP_REFERER'];
    }

    function redirect_after_login() {
        header('Location:' . $_SESSION['url']);
    }
?>
<?php
    include "function.php";
?>
<html>
    <head></head>
    <body>
        This is <?php echo $_SERVER['PHP_SELF']; ?> file.<br><br>
        <input type="button" name="login" value="Login" onclick="location.href='login.php'">
    </body>
</html>

product.php:

<?php
    session_start();

    if (isset($_SERVER['HTTP_REFERER']) && basename($_SERVER['HTTP_REFERER']) != basename($_SERVER['PHP_SELF'])) {
        $_SESSION['url'] = $_SERVER['HTTP_REFERER'];
    }

    function redirect_after_login() {
        header('Location:' . $_SESSION['url']);
    }
?>
<?php
    include "function.php";
?>
<html>
    <head></head>
    <body>
        This is <?php echo $_SERVER['PHP_SELF']; ?> file.<br><br>
        <input type="button" name="login" value="Login" onclick="location.href='login.php'">
    </body>
</html>

这是一个文件。

login.php

<?php
    include "function.php";

    if(isset($_POST['submit'])){
        if($_POST['username'] == 1 && $_POST['password'] == 1){
            //success
            $_SESSION['logged'] = 1;
            redirect_after_login();
        }else{
            //error
            $_SESSION['logged'] = 0;
            $error = 'Wrong username or password';
        }
    }else{
        unset($error);
    }
?>
<html>
    <head></head>
    <body>
        This is <?php echo $_SERVER['PHP_SELF']; ?> file.<br><br>
        <form method="post" action="login.php">
            User: <input type="text" name="username"><br>
            Pass: <input type="password" name="password"><br>
            <input type="submit" name="submit" value="Login">
        </form>
        <?php
            if(isset($error)) echo "ERROR:" .$error;
        ?>
    </body>
</html>

这是一个文件。

用户:
通过:
一些简短的解释:

  • 要测试重定向逻辑,可以先加载
    product.php?id=258
  • $\u SESSION['url']
    保留HTTP\u REFERER-您来自的页面
  • login.php
    正在成功登录时调用
    redirect\u after\u login()
    函数(当前为user:1/pass:1,仅作为示例)
  • 成功登录后,会有一个附加会话变量
    logged
    ,您可以进一步使用它(比如在
    product.php
    页面上隐藏登录按钮)
  • 在错误登录时,会显示一个错误,但您可以让用户停留在登录屏幕上
  • $\u会话['url']
    在您每次访问不同页面时都会被覆盖,并且只有在访问不同页面时才会被覆盖。这可以防止在登录错误的情况下丢失
    HTTP\u REFERER
    (当您实际刷新并且
    HTTP\u REFERER
    成为页面本身时)

希望这有帮助。

请在产品页面中添加一些代码。这就是我试图做的。我只是在
product.php中调用
,默认情况下
$info=$user==true?“是':''$url=登录后重定向\u($info)我在这里调用的函数,因为
$user=''
没有值
如果else
应该存储和获取值,因为实际上
$user.='login'
有值,但不是
$key
,那么
$activate\u finction
将始终为空。@mitkosoft抱歉忘记更新。默认情况下,调用
函数时不使用
$key
,因此
函数
存储
请求的URL
,并在
login.php
中添加
$key.='login'
,因为在登录页面中,我们在
键中添加了一个值
函数
应该为我们提供
$SESSION
数据,而我得到的是
$\u SESSION['url']=$\u服务器['REQUEST\u URI']
这就是问题所在。让我猜猜,您是在login.php中包含
function.php吗?那么您的代码
$activate\u finction=$key==true?”是':''$url=登录后重定向($activate\u finction)
应该放在
login.php中,以便在
$key.='login'之后调用此函数定义。product.php呢?我如何在会话中存储
$\u服务器['REQUEST\u URI']
,只需在
product.php
中或在
function.php
中函数声明后立即调用
在登录()后重定向即可。是的,我不想在每个产品页面中调用,我该怎么做才能更新答案不知道
你的意思是什么,我该怎么做才能更新答案?
?这一个
只需在product.php中或function.php中函数声明后立即调用redirect\u,在任何页面上都不调用。