bag*_*ilk 1 php redirect login
我本质上是在尝试创建一个登录系统,将用户返回到他们所在的页面.我知道这个问题已经被问了一些,我已经看了SO的其他答案,但我无法找到解决我特定问题的方法.
我的网站有一个带参考ID号码的表格(例如:10001,10003,10004,... 53401等).这些数字也是链接.所有链接都指向一个页面("mypage.php"),引用ID号(10004)成为该URL的查询字符串:
<td><?php echo '<a href="mypage.php?query_ecr=', urlencode($num), '">'; ?><?php echo $num; ?></a></td>
Run Code Online (Sandbox Code Playgroud)
在我的"header.php"(位于网站的每个页面上)上,菜单上有一个按钮,打开下面的表单供用户登录.
<form action='login/process.php' method='post'>
<label for='name'>Username:</label>
<input type='text' id='userid' name='user_name'/>
<label for='password'>Password:</label>
<input type='password' name='password' id='userpassword'/>
<input type='submit' value='Log In' />
<input type='hidden' name='login' value='1'>
<input type='hidden' value='".$_SERVER['PHP_SELF']."' name='redirurl'/>
</form>
Run Code Online (Sandbox Code Playgroud)
注意名为='redirurl'的"隐藏输入".我想捕获用户所在的当前页面.我已经有一个登录脚本,它将检查用户名和密码,并将它们重定向到他们需要的页面.
//login/process.php
...blah blah blah other stuff...
global $database,$session;
$this->user_status=$database->CheckUserPass($_POST['user_name'],$_POST['password']);
$url = $_POST['redirurl'];
if($this->user_status==1)
{
$session->StartSession($_POST['user_name'],$_POST['password']);
header("Location: ".$url);
} else {
...blah blah blah.....
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如果GUEST点击一个链接(例如:10004),他们将被带到网址:
http://www.XXXXXX.XXXX/mypage.php?query_ecr='10004'
Run Code Online (Sandbox Code Playgroud)
但是,在该页面上,'redirurl'的值为:
http://www.XXXXXX.XXXX/mypage.php
Run Code Online (Sandbox Code Playgroud)
它忽略了查询字符串.因此,当用户从该页面登录,并且我的登录脚本将它们重定向回该页面时,该页面有大量错误,因为它需要查询字符串.
如何将查询字符串包含在:$ _SERVER ['PHP_SELF']中?
你可以使用:
$_SERVER['REQUEST_URI']
Run Code Online (Sandbox Code Playgroud)
在域名文件夹,查询字符串等之后获取所有内容.然后您可以使用其他$ _SERVER变量来添加域,或者如果您没有更改主机,则可以在没有域名的情况下使用.
关于什么:
echo $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
Run Code Online (Sandbox Code Playgroud)
请注意,您可能希望像这样清理输出:
$url = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
echo htmlspecialchars($url, ENT_QUOTES, 'utf-8');
Run Code Online (Sandbox Code Playgroud)
防范XSS.