我正在使用登录系统。当我在没有登录的情况下导航到comments / index.php时,一些变量就可以使用GET方法传递了。然后,如果我在这个页面上登录,这些变量就会消失。消失的变量是$ submission,$ submissionid和$ url。
我认为我可以使用GET方法在登录后通过将?submission='.$submission.'&submissionid='.$submissionid.'&url='.$url.'
附加到登录表单操作的URL来保持活动,如下所示。但是在我添加之后,变量仍然消失了。
我尝试使用的相关代码如下。
知道我能做些什么来让它做我想做的事情?
提前致谢,
约翰
在comments / index.php中:
require_once "header.php";
include "login.php";
include "comments.php";
在login.php中:
if (!isLoggedIn())
{
if (isset($_POST['cmdlogin']))
{
if (checkLogin($_POST['username'], $_POST['password']))
{
show_userbox();
} else
{
echo "Incorrect Login information !";
show_loginform();
}
} else
{
show_loginform();
}
} else
{
show_userbox();
}
在comments.php中:
$url = mysql_real_escape_string($_GET['url']);
echo '<div class="subcommenttitle"><a href="http://www.'.$url.'">'.$submission.'</a></div>';
$submission = mysql_real_escape_string($_GET['submission']);
$submissionid = mysql_real_escape_string($_GET['submissionid']);
登录功能:
function show_loginform($disabled = false)
{
echo '<form name="login-form" id="login-form" method="post" action="./index.php?submission='.$submission.'&submissionid='.$submissionid.'&url='.$url.'">
<div class="usernameformtext"><label title="Username">Username: </label></div>
<div class="usernameformfield"><input tabindex="1" accesskey="u" name="username" type="text" maxlength="30" id="username" /></div>
<div class="passwordformtext"><label title="Password">Password: </label></div>
<div class="passwordformfield"><input tabindex="2" accesskey="p" name="password" type="password" maxlength="15" id="password" /></div>
<div class="registertext"><a href="http://www...com/sandbox/register.php" title="Register">Register</a></div>
<div class="lostpasswordtext"><a href="http://www...com/sandbox/lostpassword.php" title="Lost Password">Lost password?</a></div>
<p class="loginbutton"><input tabindex="3" accesskey="l" type="submit" name="cmdlogin" value="Login" ';
if ($disabled == true)
{
echo 'disabled="disabled"';
}
echo ' /></p></form>';
}
答案 0 :(得分:1)
$submission
&amp; c。是show_loginform
的本地人。您需要声明它们global(yech),将它们作为参数传递给函数:
function show_loginform($submission, $submissionid, $url, $disabled = false) {
...
//login.php:
...
// warning: vulnerable to injection attack.
show_loginform($_GET['submission'], $_GET['submissionid'], $_GET['url']);
或做类似的事情:
function show_loginform($disabled = false) {
// vulnerable to injection attacks
?><form name="login-form" id="login-form" method="post" action="./index.php?<?php echo $_SERVER['QUERY_STRING']; ?>">
...
最后一个是最干净,最简单的,只是通过查询字符串,而不是重建它。
答案 1 :(得分:0)
用户会话......
<?php
session_start();
$result = checkLogin($_POST['username'], $_POST['password']);
if($result) {
unset($_POST['password']);
foreach($_POST as $k => $v) {
$_POST[$k] = trim(strip_tags($v)); // Fix injection
}
$_SESSION = $_POST;
$_SESSION['authenticated'] = true; // Changed the order to show authenticate
}
答案 2 :(得分:0)
$ _GET变量只会传递到第一页,因此您需要手动传递它们。首先检查用户是否已登录。如果不是,请显示表单。然后使用以下内容:
$query = http_build_query($_GET)
这将从$ _GET变量中构建一个查询字符串。现在,在表单的action属性中,添加./index.php?$query
。
这将确保在用户登录后传递它们。
答案 3 :(得分:0)
你的Querystring中有一个拼写错误:?submission ='。$ submission。'&amp; submissionid ='。$ submissionid。'&amp; url ='。$ url。'
在提交给uppersand&amp;。
之前替换$符号您应该检查以上帖子中的注射漏洞。
祝你好运