所以我有一个页面,我已经将用户的用户名存储为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从数据库中获取用户信息,如果您正在使用数据库来存储用户信息