如何在PHP中识别会话中的用户

时间:2013-06-11 20:02:21

标签: php mysql

我登录用户,在我的PHP脚本中,我创建一个会话变量并为其分配用户名(因为它是唯一的)。

<?php
session_start();
//$username= getting username from database and all after loggin
$_SESSION['user_of_mywebsie']=$username;
// using $username now

现在这是正确而安全的方式吗?如果没有,可以做些什么? 现在使用用户名创建会话..

$sql_query=mysql_query("SELECT * FROM people WHERE username='$_SESSION['user_of_mywebsite']'");
while($row=mysql_fetch_assoc($sql_query))
{
$name=$row['name'];
$profile_pic=$row['pro_pic_location'];
}

//now i will use $name and $profile_pic furthur 

4 个答案:

答案 0 :(得分:2)

不,不正确。您的代码容易受到SQL injection的攻击。如果我的用户名是Robert'); DROP TABLE Students;--

,该怎么办?

您应该至少逃避数据,甚至更好地使用预准备语句和绑定参数。

How can I prevent SQL injection in PHP?

此外,您使用的是不推荐使用的数据库API。 Either use mysqli_* or PDO

答案 1 :(得分:1)

这是完全正确的! $ _SESSION var将仅包含您网站的特定访问者的信息,无论您是否已写入$ _SESSION(但是,公平地说,有一些可能会阅读“外国”会话,例如使用共享托管或多应用程序设置等)。

我正是这样做的(与你的几乎相同)

$_SESSION['user_name'] = $result_row->user_name;

在我的PHP登录脚本中(这是github上最明星,下载和分叉的脚本,并且已被一些非常挑剔的人检查过)。查看更多脚本here on github

答案 2 :(得分:1)

这会将用户名存储在会话中,但不是特别安全。

如果您在会话中持有的唯一内容是用户名,这可能没问题,但如果您在用户会话中存储了个人信息,则可能需要考虑添加一些安全性。

我找到了这个方便快捷的会话安全教程http://phpsec.org/projects/guide/4.html

此外,如果您不熟悉php编程,最好使用其中一个实现用户管理的框架,因为之前已经多次完成,测试和完善。无需在这里重新发明轮子。

如果您确实使用了框架,可以查看有关框架和用户管理的问题,特别是这个答案:https://stackoverflow.com/questions/10153619/looking-for-a-well-written-user-management-framework#10624058

答案 3 :(得分:0)

它会起作用,但你必须注意两件事:

  1. 您必须确保没有两个或更多用户具有相同的名称;
  2. 如果已删除登录用户(会话有效的用户名)并且创建了另一个具有相同名称的用户,会发生什么?
  3. 在这些情况下,可能会发现仍然在会话中的用户可以发现自己登录...但是作为另一个用户!

    尝试在会话中添加唯一的用户ID。