Mysql_real_escape_string ($username)然后存储为cookie并用于验证登录


mysql_real_escape_string($username) then storing as cookie and used to verify login

所以我有一个页面,我已经将用户的用户名存储为cookie,并将其用于不同的事情。然而,我已经碰壁了。如果用户名包含使用escape_string时的任何内容,则会出错。我能够在一个页面上正确地获得用户名echo 'ed,但在另一个页面上,我无法让它正常出现。如果我只是回该页面上的cookie直接我得到/(我使用的用户名是"只是为了测试)。我的服务器似乎自动转义变量有时所以我不是100%确定,当它自动应用斜杠,当它没有,当我使用php发送变量(发送电子邮件与变量),他们被转义,当我把它们保存到数据库(发送变量到mysql),他们不削减?所以这里是我的代码,我认为可能会有所帮助,记住用户名在这种情况下是"。

注册用户名:

 $username = mysql_real_escape_string($_POST['username']);

设置cookie:

$username = mysql_real_escape_string($_GET['username']);
$user = stripslashes($username);
setcookie('username', $user, time()+3600*24);
工作页面:

  if(isset($_COOKIE['username']))
   { 
  $login = '<a id="popup_link_3" class="popup_link menu"><span>' . stripslashes($_COOKIE['username']) . '</span></a>'; }
else{ 
 $login = '<a  id="popup_link_2" class="popup_link menu"><span>Login</span></a>';
 } 

这里是用户名在工作页面上显示的地方,我看到":

 <? echo $content1 ?>
 <li> <? echo $login ?></li>
 <? echo $content2 ?>

非工作页:

 $username = $_COOKIE["username"];

当我返回$username时,我看到的是/,当我返回stripslashes时,我什么也看不到。

设置后的cookie值:%22%22

为什么要使用mysql_real_escape_string() ?这个函数的目的是使一个字符串可以安全地插入MySQL数据库查询字符串中。它不是,也从来没有打算在cookie中使用。只要您使用setcookie(), PHP将负责转义进入cookie的任何数据。

试试echo get_magic_quotes_gpc();。如果它回显1,你有魔术引号,你应该在php.ini(指令)中禁用该功能。

我建议您不要将用户的用户名存储在cookie中,而是使用某种形式的会话ID,这将使其更安全,然后您只需使用该会话ID从数据库中获取用户信息,如果您正在使用数据库来存储用户信息