如果用户名可以相同,将返回什么以通过服务器识别用户?

时间:2015-12-18 11:34:04

标签: session server

我是服务器开发新手,有一个问题:

当用户登录时,服务器将返回什么来识别用户,这样当用户下次登录时,他们不需要再次输入用户名和密码,以及将在服务器中保存什么以记录状态用户,保存在内存或数据库中。移动应用和网站的解决方案会有所不同吗?

我对此感到困惑,任何人都可以教我,谢谢!

3 个答案:

答案 0 :(得分:1)

存在许多具有不同属性的身份验证机制,用于向客户端验证客户端。

最简单的是Sessions,我建议你从它开始。基本思想是,当用户成功登录时,服务器会生成一个大的唯一随机数(通常具有到期时间)并将其发送回用户。客户端和服务器都在某处存储此值。下次用户执行请求时,它会发回会话ID,这样服务器就知道它是以前登录过的用户。几乎所有语言都支持这种机制,你可以很容易地处理它。

另一种有趣的身份验证机制叫做JWT(Json Web Token)。在这种情况下,服务器会生成一个自包含令牌,供用户用于将来的请求。在这种情况下,服务器不必存储令牌,因为所需的信息嵌入在令牌本身中。您可以在此处找到所有必要的信息和资源:https://jwt.io/

还有其他标准可以执行稍微复杂的身份验证。其中最受欢迎的是OAuth(https://en.wikipedia.org/wiki/OAuth)。

答案 1 :(得分:0)

当用户发送其用户名/密码时,生成会话令牌。然后,将该令牌存储在客户端(例如,如果使用浏览器,则为cookie)。在服务器端,如果需要长时间保存或在内存(用户会话)中,可以将其保存在presistent store(数据库)中。

之后,用户需要发送该令牌以识别自己,而不是每次都重新发送他的用户名/密码。会话令牌可以通过多种方式发送;通过cookies,Authorization标题,帖子正文等。

另外,考虑通过安全连接(https)发送会话令牌以解决安全问题,并检查会话是否过期。

答案 2 :(得分:0)

您必须使用会话存储。 一个例子,在通用页面中:

<?php

session_start();

if(!isset($_SESSION)) {
    //Redirection to login page
    header('Location: loginPage.php');
} else {
    //User is log
    var_dump($_SESSION);
}

在登录页面中:

<?php

session_start();

//Your query for verifing is username and password matched
$isMatched = true;

if($isMatched) {

    $_SESSION['userId'] = 45687; //Id of the user
    //You can save what you want in this session
}

在每个页面上,您都可以使用$_SESSION['theValueYouSet']

检索数据保存