通过PHP的GET在URL中保持登录状态

时间:2009-08-09 20:08:05

标签: php url login get

我将POST中的变量电子邮件和密码放到GET中,以便

我的 handle_login_form.php

的一部分
 header("Location: /codes/index.php?ask_question&" . "email=" . $_POST['email'] . "&" . "passhash_md5=" . md5($_POST['password']) );

然后,用户单击“关于”链接。他应该在网址中有登录信息,但他没有。他只有index.php?about&

index.php

的一部分
if (isset($_GET['email'])) {
         echo  ("<li><a href='?about&email='" .
             $_GET['email'] .                                                                                      
             "&passhash_md5" . 
             $_GET['passhash_md5'] . 
             ">About</a></li>");
     } else {
         echo "<li><a href='?about'>About</a></li>";
     }

这就是发生的事情

STEP      | handle_login_form.php  index.php?email&passhash_md5    index.php?about&
protocol  | POST                -> GET                          -> GET
----------------------------------------------------------------------------------
variables | password               passhash_md5                    passhash_md5
          | email                  email                           email
                                                                   Problem HERE!

1 个答案:

答案 0 :(得分:2)

您需要转义HTML中的&字符。对于以HTML格式打印的每个&符号,请使用&amp;代替&

您还在第二个声明中添加了额外报价单引号。这是一个固定版本:

  echo  ("<li><a href='?about&email=" .
    $_GET['email'].
    "&passhash_md5" . 
    $_GET['passhash_md5'] . 
    "'>About</a></li>");

请记住,在查询字符串中存储(哈希)密码是不安全的:每个嗅探数据的人都可以通过复制正确的URL来欺骗用户。请考虑改为使用session cookie

相关问题