2014-04-01 29 views
0

这是我的问题。如何注销特定用户会话(php和mysql)

我正在研究食品管理系统。

现在我有它当前有人登录时,它将他们的信息放入登录表。

然后,使用该信息,当用户注销时,它将它们带出表格。

虽然多人登录时我遇到了麻烦。

检查此场景。

有人登录。他们被带到他们的仪表板,并根据食物表,食物列表和电子邮件列来查看他们的食物列表,指定谁拥有该特定物品。

现在,如果它们注销,它会将它们从登录表中取出。

但是,如果第一个用户仍然登录,并且第二个用户登录,那么问题就会出现。

如果第二个用户在第一个用户之前先注销,他的数据将被删除。但是,如果第一个用户在第二个用户之前注销,则第二个用户的数据仍将从表中删除。如果第二个用户刷新,他将显示第一个用户信息。

它与我认为的会话有关,当用户登录时,它会转到仪表板并启动会话。我设置它的方式是,当会话启动时,它从最新用户电子邮件的登录表中提取。这就是这个问题。当2 ppl登录时,用户电子邮件变量现在引用最近的用户,所以当第一个用户注销时,最近的用户将被注销。

有没有一种方法可以创建独特的会话,或者在用户登录时存储用户的电子邮件/用户名,所以我可以在他们注销时引用特定用户的电子邮件。

以下是启动会话和查找最近用户的代码。

<?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现在设置为下一个用户的电子邮件。我需要它,以便它保持为登录的用户电子邮件。

+0

除非你在做一些奇怪的事情,否则会话_should_对用户来说是唯一的。与其试图从头开始编写此代码,您可能希望找到一个您喜欢的框架,它将提供执行此类操作的代码。 – Kryten

+0

这个问题似乎对Stack Overflow来说过于宽泛,这是针对有明确答案的编码的具体问题。高级别设计概念和最佳实践的讨论更适合于http://programmers.stackexchange.com。请阅读[此meta post](http://meta.stackexchange.com/a/82990/228805)了解更多信息。如果您有特定的编码问题,则需要提供更多信息。请阅读此[关于如何提出良好问题的建议](http://stackoverflow.com/help/how-to-ask)。 –

+0

我在代码中添加了一些更具体的内容。 – user3486712

回答

0

通常,您将使用会话变量来记住当前登录的用户ID的ID。 EG

$_SESSION['userId']=$validatedUserId; 

$ validatedUserId的id当且仅当它通过密码检查,否则它应该为空;

然后返回帖子可以参考布尔

(null!=$_SESSION['userId']) 

你可以转到这个代码,如果没有空的用户登录。 当用户注销时,问题:

$_SESSION['userId']=null; session_destroy(); 

后,用户需要登录可以使用$ _SESSION [“用户id”]之前一次。

+0

谢谢你。 此外,当我测试时,我在同一个浏览器实例上登录了两个帐户,会在记忆会话id时造成麻烦吗? – user3486712

+0

包含userId的$ _SESSION数组将在特定浏览器的选项卡和窗口之间共享,但IE,chrome,firefox中的每一个都将具有单独的SESSION ID,因此数组可以具有不同的值。完全像在不同机器上的两次会话。 – doctorbobapplications