登录后使用GET方法维护变量

时间:2010-04-16 02:43:09

标签: php

我正在使用登录系统。当我在没有登录的情况下导航到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>';


}

4 个答案:

答案 0 :(得分:1)

$submission&amp; c。是show_loginform的本地人。您需要声明它们globalyech),将它们作为参数传递给函数:

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;。

之前替换$符号

您应该检查以上帖子中的注射漏洞。

祝你好运