我是服务器开发新手,有一个问题:
当用户登录时,服务器将返回什么来识别用户,这样当用户下次登录时,他们不需要再次输入用户名和密码,以及将在服务器中保存什么以记录状态用户,保存在内存或数据库中。移动应用和网站的解决方案会有所不同吗?
我对此感到困惑,任何人都可以教我,谢谢!
答案 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']