mysql和php-基于用户登录从数据库检索数据

mysql和php-基于用户登录从数据库检索数据,php,mysql,database,Php,Mysql,Database,在我继续尝试创建网站之前,我想知道是否可以通过$\u会话变量确定根据登录的用户从数据库中提取用户内容。例如,如果我想要用户“示例”的所有消息: $_SESSION['username'] = $_POST['username'] // set when the user logs in $username = $_SESSION['username'] $data = mysql_query("Select * from messagesTable where username = '$use

在我继续尝试创建网站之前,我想知道是否可以通过$\u会话变量确定根据登录的用户从数据库中提取用户内容。例如,如果我想要用户“示例”的所有消息:

$_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']
}
我想知道这样做是否正确,基于会话变量返回(个人)数据是否安全


我对这两种语言都没有太多的经验,但我喜欢凭经验学习,如果不清楚,请告诉我。谢谢。

这不是标准的,而且可能不安全,因为phpsession保持打开状态,即使浏览器选项卡可能无法打开到站点,因为浏览器关闭之前cookie不会被释放,而且您也可以向站点发送post参数并获取信息,因此登录脚本更高级,您可以有一个在登录时生成的唯一密钥,当他们使用javascript离开站点时,删除cookie之类的内容,如果您确信它的有效性,那么基于
$\u会话
变量返回用户数据是安全的,因为您自己在代码中设置了它。基于从
$\u POST
获取的会话变量返回数据是不安全的

您最初设置

$_SESSION['username'] = $_POST['username'];
因此,除非您已使用密码或其他方式验证此用户是他声称的用户,否则您不应使用
$\u POST['username']
返回其他信息。如果您的登录过程(上面我们看不到)已经验证了
$\u POST['username']
是否有效,您可以将其用作获取其他信息的源

您还需要针对SQL注入进行筛选:

$_SESSION['username'] = mysql_real_escape_string($_POST['username']);

这不是正确的方法不

在尝试网站之前,我建议您先阅读php/mysql文档和/或一本好书

您还需要研究安全性(会话劫持、交叉脚本、mysql攻击、表单令牌、登录系统、用户角色/权限)。谷歌搜索是你的朋友…


<?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");
    }
?>

是的,谢谢,很抱歉,我刚打出来,我的实际代码包括所有其他密码检查和其他东西,lolAnd,而且,与问题无关,您可以查看mysqli或PDO,因为mysql函数现在已不推荐使用。希望有帮助。=)你会说为什么这样做是错误的,或者只是告诉我去读一本书。很明显,阅读文档或者一本书不是一个选择:我刚刚给了你6/7个好的理由,或者你也没有读过吗?哦,对了,我想还有更多,因为你说“也”了