【发布时间】:2014-05-12 19:44:45
【问题描述】:
这是我的问题。
我正在开发食品管理系统。
现在我知道,当有人登录时,它会将他们的信息放入登录表中。
然后,使用该信息,当用户注销时,它会将他们从表中删除。
当多人登录时,我遇到了麻烦。
检查这个场景。
有人登录。他们被带到他们的仪表板,并且能够根据食物表在一个列表中查看他们的食物,该列表有食物行,电子邮件列指定谁拥有该特定项目。
现在如果他们注销,它会将他们从登录表中删除。
但是,如果第一个用户仍然登录,然后第二个用户登录。那就是问题开始出现的时候。
如果第二个用户在第一个用户之前先退出,他的数据将被删除。但是如果第一个用户在第二个用户之前注销,第二个用户的数据仍然会从表中删除。如果第二个用户刷新,他会看到第一个用户的信息。
我认为这与会话有关,当用户登录时,它会转到仪表板并启动会话。不过,我设置它的方式是,当会话开始时,它会从登录表中提取最新用户的电子邮件。所以这就是问题所在。当 2 ppl 登录时,user email 变量现在引用最近的用户,所以当第一个用户注销时,最近的用户将被注销。
有没有办法创建唯一的会话,或者在有人登录时存储用户电子邮件/用户名,以便我可以在他们注销时参考该特定用户的电子邮件。
这是启动会话并查找最新用户的代码。
<?php require_once('Connections/localhost.php');
$index = 0;
?>
<?php
//initialize the session
if (!isset($_SESSION)) {
mysql_select_db($database_localhost, $localhost);
$log = mysql_query("SELECT email FROM loggedin") or die(mysql_error());
while($cols = mysql_fetch_array($log)){
$value = $cols['email'];
$email[$index] = $value;
$index++;
}
session_start();
然后我在查询中引用该 $value 变量。
因此,每次有人登录时都会运行此代码,然后将 $value 设置为最近的电子邮件,或者更确切地说,设置为查询电子邮件数组末尾的电子邮件。因此,当用户 1 注销时,它会在查询中使用 $value,但 $value 现在设置为下一个用户的电子邮件。我需要它,以便它保留为登录的用户电子邮件。
【问题讨论】:
-
除非您在做一些奇怪的事情,否则会话应该对用户来说是唯一的。与其尝试从头开始编写此代码,您可能希望找到一个您喜欢的框架来提供执行此类事情的代码。
-
这个问题对于 Stack Overflow 来说似乎太宽泛了,这是针对可以有明确答案的编码的具体问题。讨论高级设计概念和最佳实践更适合programmers.stackexchange.com。请阅读this meta post 了解更多信息。如果您有特定的编码问题,则需要提供更多信息。请阅读此advice on how to ask good questions。
-
我在代码中添加了一些更具体的内容。
-
我有一个身份证。当会话开始时,我可以将带有会话 ID 的用户电子邮件添加到登录表中,然后当我希望他们注销时,我只需从登录中删除与会话 ID 对应的电子邮件。
标签: php mysql sql session logging