2013-03-27 52 views
0

如果我想存储当前在我的网站上的用户的$ _SESSION ['user']名称,并且我想在每个页面上写一条消息, “用户”,我该做什么?我已经试过:不工作SESSION ['user'] in php

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

进入验证页面,我有

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

//并在其他网页我有

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

>

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

+4

页面开头是否有'session_start()'? – JoDev 2013-03-27 15:16:12

回答

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"); 
+0

建议OP应该调整[错误报告级别](http://php.net/manual/en/function.error-reporting.php)。 – ficuscr 2013-03-27 15:19:11

+0

非常感谢!我不能为你的答案投票,因为我是新的,我必须有一些声望点。我会在那之后投票。无论如何,再次感谢。 – 2013-03-27 15:21:26

1

您在其他页面的开始丢失了session_start(),一旦你在特定的启动会话的会话值将可以访问页。

+0

非常感谢!我不能为你的答案投票,因为我是新的,我必须有一些声望点。我会在那之后投票。无论如何,再次感谢。 – 2013-03-27 15:22:04