所以我有一个页面,我已将用户的用户名存储为cookie,并将其用于不同的事情。但是我撞墙了。如果用户名包含/ {当使用escape_string
时所做的任何操作。我能够在一个页面上正确地获取用户名echo
',但在另一个页面上我无法正常使用它。如果我只是直接回显该页面上的cookie,我得/(用户名即用“是”只是为了测试)。我的服务器似乎有时自动转义变量所以我不是百分之百确定当它自动应用斜杠而当它没有,因为当我发送变量使用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
答案 0 :(得分:2)
为什么要使用mysql_real_escape_string()?该函数旨在使字符串安全地插入到MySQL数据库查询字符串中。它不是,而且从来没有打算用于cookie中。只要您使用setcookie()
,PHP就会负责转发进入cookie的任何数据。
答案 1 :(得分:0)
尝试echo get_magic_quotes_gpc();
。如果它回显1
,你就会有魔术引号,你应该在php.ini(instructions)中禁用该功能。
答案 2 :(得分:0)
我建议你不要在cookie中存储用户用户名,而是使用某种形式的会话ID,这会使它更安全,然后你只需使用该会话ID从数据库中获取用户信息,如果你正在使用数据库来存储用户信息。