使用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,在任何页面上都不调用。