2011-05-09 197 views
1

我有几个关于会话和登录/注销系统的问题。PHP会议登录系统问题!

在我的系统中,首先检查用户数据(用户名和密码)是否正确。如果是这样,我正在注册一个会话:$_SESSION['loggedin'] = 1然后我假设已经登录,我总是检查是否$_SESSION['loggedin'] 1或不。

但是,我最近观察到,在其中一个用户登录后,让他们转到他们的页面:/profile.php?u=newuser,但是当他们在他们自己的页面中时,如果他们恰好将url更改为:/ profile.php?u=newuser2我的系统假设newuser2现在已经被登录了:(我怎样才能解决这个问题?最好和最安全的登录用户的方式是什么?

最后,会按照下面的方式工作吗?假设我注册了$_SESSION['username'] = $username;在这里$ username data是从数据库检索,为了理解一个用户登录或不,我总是从数据库中检索用户名,并检查$_SESSION['username'] == username。这是合乎逻辑的吗?总是从数据库获取用户名是否有效?

+0

你并不需要通过周围的用户名中的URL。只需在会话中将其存储在登录时,并检查会话是否设置了用户名,而不是1,则在会话中将该值用作用户名(如果存在)。 – Orbling 2011-05-09 01:25:16

回答

3

由于会话数据存储在服务器上,因此在$ _SESSION中存储用户名并按照您的说法检查它是没有问题的。

这会更好地存储用户ID,但说实话没什么大不了的。除非你允许用户改变他们的用户名。

profile.php不应该有决定编辑谁的$ _GET变量。它应该会自动使用登录的人。即

,而不是去

$username = $_GET['u']; 

您应该使用

$username = $_SESSION['username']; 
+0

所以我要检查$ _SESSION ['username'] == $ _GET ['u']?如果这是正确的,那么用户登录,对吧? – makyol 2011-05-09 05:24:15

+0

不,你不应该使用$ _GET ['u']你应该去if(isset($ _SESSION ['username'])){echo'logged in!'; } – 2011-05-09 05:26:12

+0

问题是,当用户登录时,我确定$ _SESSION ['username']。如果该用户转到其他人的页面,它仍然可以看到其他用户的私人功能。如何在只检查,isset($ _ SESSION ['用户名'])时保护它? – makyol 2011-05-09 08:00:51