在我开始尝试创建网站之前,我想知道是否可以通过$ _SESSION变量确定是否从数据库中提取用户内容,具体取决于登录的用户。例如,如果我想要用户'示例'的所有消息:
$_SESSION['username'] = $_POST['username'] // set when the user logs in
$username = $_SESSION['username']
$data = mysql_query("Select * from messagesTable where username = '$username'")
while($row = mysql_fetch_array($data)) {
echo $row['message']
}
我想知道这是否是做这样的事情的正确方法,以及是否可以安全地根据会话变量返回(个人)数据。
我在这两种语言中都没有那么多经验,但我喜欢学习经验,请告诉我是否不清楚。感谢。
答案 0 :(得分:3)
如果您确定其有效性,则可以安全地返回基于$_SESSION
变量的用户数据,因为您自己在代码中设置了它。根据您从$_POST
获得的会话变量返回数据不安全。
您最初设置
$_SESSION['username'] = $_POST['username'];
因此,除非您已使用密码验证或此用户是他声称的用户,否则您不应使用$_POST['username']
返回其他信息。如果您的登录过程(我们在上面看不到)已经验证$_POST['username']
是否有效,您可以将其用作检索其他信息的来源。
您还需要过滤SQL注入:
$_SESSION['username'] = mysql_real_escape_string($_POST['username']);
答案 1 :(得分:0)
这不是标准的,可能不安全,因为即使浏览器标签可能没有打开到网站,phpsession保持打开,因为在浏览器关闭之前cookie没有被缓解,你也可以发送一个post参数给网站和获取信息也是如此,所以登录脚本更高级,你可以像登录时生成一个唯一的密钥,当他们使用javascript离开网站时删除像这样的cookie
答案 2 :(得分:0)
这不是正确的做法。
我建议你在尝试网站之前先阅读php / mysql文档或一本好书。
您还需要研究安全性(会话劫持,交叉脚本,mysql攻击,表单令牌,登录系统,用户角色/权限)。谷歌搜索是你的朋友......
答案 3 :(得分:-2)
<?php
session_start();
$username="";
if($_SESSION['username']==true){
$username=$_SESSION['username'];
$conn=mysql_connect('localhost','user','passwd') or die("Unable
to connect to database" .mysql_error());
mysql_select_db('DBName') or die(mysql_error());
$sql="SELECT * FROM tablename WHERE username='$username'";
$retval=mysql_query($sql, $conn) or die("Could not perform query"
.mysql_error());
while($row=mysql_fetch_array($retval)){
echo {$row['message']};
}
mysql_free_result($retval);
mysql_close($conn);
}
else{
return false;
header("Location:login.php");
}
?>