mysql和php - 根据用户登录从数据库中检索数据

时间:2011-12-29 02:48:45

标签: php mysql database

在我开始尝试创建网站之前,我想知道是否可以通过$ _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']
}

我想知道这是否是做这样的事情的正确方法,以及是否可以安全地根据会话变量返回(个人)数据。

我在这两种语言中都没有那么多经验,但我喜欢学习经验,请告诉我是否不清楚。感谢。

4 个答案:

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