Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
会话上的PHP登录系统问题!_Php_Mysql_Session_Login_Logout - Fatal编程技术网

会话上的PHP登录系统问题!

会话上的PHP登录系统问题!,php,mysql,session,login,logout,Php,Mysql,Session,Login,Logout,我有一些关于会话和登录/注销系统的问题 在我的系统中,首先我要检查用户数据(用户名和密码)是否正确。如果是这样,我正在注册一个会话:$\u session['loggedin']=1,那么我假设已登录,并且我总是检查$\u session['loggedin']1 但是,我最近观察到,在其中一个用户登录后,假设他们进入自己的页面:/profile.php?u=newuser,但是当他们在自己的页面上时,如果他们碰巧将url更改为:/profile.php?u=newuser2我的系统假设newu

我有一些关于会话和登录/注销系统的问题

在我的系统中,首先我要检查用户数据(用户名和密码)是否正确。如果是这样,我正在注册一个会话:
$\u session['loggedin']=1
,那么我假设已登录,并且我总是检查
$\u session['loggedin']
1

但是,我最近观察到,在其中一个用户登录后,假设他们进入自己的页面:
/profile.php?u=newuser
,但是当他们在自己的页面上时,如果他们碰巧将url更改为:/
profile.php?u=newuser2
我的系统假设newuser2现在已登录:(我如何解决这个问题?什么是用户登录的最佳安全方式


最后,下面的方法有效吗?假设我在这里注册
$\u会话['username']=$username;
,从数据库中检索$username数据。为了了解用户是否登录,我总是从数据库中检索username并选中
$\u会话['username']==用户名
。这是否合乎逻辑?始终从数据库获取用户名是否有效?

由于会话数据存储在服务器上,因此将用户名存储在$\u会话中并按照您所说的进行检查应该没有问题

最好是存储用户id,但老实说这没什么大不了的。当然,除非你允许用户更改用户名

profile.php不应该有一个$\u GET变量来决定编辑谁。它应该自动使用登录的人

而不是去

$username = $_GET['u'];
你应该使用

$username = $_SESSION['username'];

你不需要在URL中传递用户名。只要在他们登录时将其存储在会话中,然后检查会话是否设置了用户名,而不是1,如果会话中存在用户名,则使用会话中的值作为用户名。那么我是否要检查$\u session['username'==$\u GET['u']如果这是正确的,那么用户是loggedin,对吗?不,你不应该使用$\u GET['u']你应该去If(isset($\u SESSION['username']){echo'logged in!'}问题是,好的,我设置了$\u SESSION['username']当用户登录时。如果该用户进入其他用户的页面,它仍然可以看到其他用户的私人功能。我如何使其在仅检查时受保护,isset($\u会话['username')?顺便说一句,我正在做的是将$\u SESSION['username']设置为登录用户的用户名。我在这里遗漏了什么?如果是,您应该转到$\u SESSION['username']=$\u GET['u']是的,您是对的$\u会话['username']是登录用户的用户名