0

如果我想将当前在我网站上的用户的名称存储到 $_SESSION['user'] 中,并且我想在每个页面上写一条消息,比如 Hy“用户”,我该怎么办?我试过了:

<?php 
      session_start();
?>  
   <form> ... </form>

进入我的验证页面

     <?php  
      $_SESSION['user']=$_POST['user'];
      ...
    ?>

//在我的其他页面上

 <?php
echo "Hy ".$_SESSION['user'];
...

?>

在我的网站上,我只有“Hy”,没有用户。我做错了什么?

4

3 回答 3

6

session_start()在每一页的开头调用。

于 2013-03-27T15:15:48.940 回答
4

您必须确保函数session_start()在您要使用会话的每个页面上。此外,在将任何标头/输出发送到浏览器之前,需要使用 session_start()。

好的:

<?php
session_start();

//Do something with sessions
$_SESSION['user'] = $username;

坏的:

<?php
echo 'Hi';
session_start();

坏的:

<head>
    <title>Page Title</title>
</head>
<?php
session_start();

此外,如果您不清理输出,您当前的实现会带来安全风险。确保在输出用户名时使用htmlspecialchars,否则您很容易受到 XSS 攻击:

echo htmlspecialchars($_SESSION['user'], ENT_QUOTES, "utf-8");
于 2013-03-27T15:16:10.810 回答
1

session_start()在其他页面的开头缺少,一旦您在特定页面中启动会话,就可以访问会话值。

于 2013-03-27T15:16:35.280 回答