Php 如何在web应用程序中检查用户是否登录?
我想了解web应用程序身份验证的全部细节。因此,我决定从头开始编写CodeIgniter身份验证库。现在,我必须做出关于如何确定一个用户是否登录的设计决策 基本上,在用户输入用户名和密码对之后。已为此会话设置cookie,web应用程序中的以下导航将不需要用户名和密码。服务器端将检查会话cookie是否有效,以确定当前用户是否登录。问题是:如何确定cookie是否是从服务器端发出的有效cookie 我可以想象最简单的方法是将cookie值也存储在会话状态中。对于每个HTTP请求,比较来自cookie的值和来自服务器会话的值。(因为CodeIgniter会话库将会话变量存储在Cookie中,如果没有一些调整,它将不适用。)此方法需要存储在服务器端 用于部署在多个数据中心的大型web应用程序。用户在一个数据中心浏览时可能输入用户名和密码,而他/她稍后在另一个数据中心访问web应用程序。预期的行为是用户只需输入用户名和密码一次。因此,所有数据中心都应该能够访问会话状态。即使会话状态存储在外部存储器(如数据库)中,这也可能不适用 我试过谷歌。我用亚洲代理登录谷歌,该代理应该可以指引我到亚洲的数据中心。然后我切换到北美代理,该代理将引导我到北美的数据中心。它可以识别我的登录名,而无需再次询问用户名和密码 那么,有没有办法确定用户是否在没有服务器端会话状态的情况下登录?没有,这是不可能的。Php 如何在web应用程序中检查用户是否登录?,php,authentication,session,codeigniter,cookies,Php,Authentication,Session,Codeigniter,Cookies,我想了解web应用程序身份验证的全部细节。因此,我决定从头开始编写CodeIgniter身份验证库。现在,我必须做出关于如何确定一个用户是否登录的设计决策 基本上,在用户输入用户名和密码对之后。已为此会话设置cookie,web应用程序中的以下导航将不需要用户名和密码。服务器端将检查会话cookie是否有效,以确定当前用户是否登录。问题是:如何确定cookie是否是从服务器端发出的有效cookie 我可以想象最简单的方法是将cookie值也存储在会话状态中。对于每个HTTP请求,比较来自cook
这些数据中心不是相互隔离的,而是相互连接的。
它是分布式但坚固的“数据库等外部存储” 跨域授权是另一回事,但也很容易实现 这样的信息有什么用呢?仅仅是用户登录的事实,没有任何用户选项、凭据,还有什么用呢?为什么服务器端没有数据库?有用的资源:
- 允许您使用自己的机制(例如连接到外部数据库)替换PHP基于文件的会话处理
- 处理mySQL复制
也可以考虑服务器故障。假设用户被验证为<强> > <>强>,因为存在看起来像会话cookie的东西是一个很坏的想法。另外,如果您不首先调用session_start(),就开始尝试度量有关会话的事实,那么代码将变得非常混乱。更好的解决方案是在会话itelf中存储用户经过身份验证的事实(以及可能的一些授权信息),例如
session_start();
if (!$_SESSION['auth_user']) {
if ($_POST['username'] && $_POST['password']
&& check_valid($_POST['username'],$_POST['password']) {
$_SESSION['auth_user']=$_POST['username'];
} else {
// user is not logged in
header('Location: /login.php');
print 'You are not logged in';
exit;
}
}
C
那么,有没有办法确定用户是否在没有服务器端会话状态的情况下登录
是的,有。服务器应使用加密的用户ID(可能还有其他数据)设置cookie。如果所有服务器共享该密钥,那么它们也知道如何解密该cookie,从而可以独立地对用户进行身份验证。如果cookie还包含未加密的用户ID,那么您可以使用自定义单向加密函数(也称为salt或hash)来检查它是否有效。如果你真的关心安全,你可以加密更多的数据,例如IP地址、有效期等。如果你愿意,你还可以使用非对称加密,使用公钥和私钥,和/或数字签名。你的意思是谷歌将为所有数据中心提供一个全球可访问的会话存储?服务器端一般会检查用户是否登录;并决定是继续用户操作还是重定向到登录页面。在现实生活中,我想用户选项也会加载到会话中。@Morgan好吧,这决定了用户已经登录。下一步是什么?“会话”是什么意思?它不是同样的全局数据库吗?我想登录用户的会话数据通常会包含每个会话的信息(例如登录时间)和一些常用信息(例如用户偏好)。这些信息也应该可以在全球范围内访问。@摩根:无论如何,你必须拥有全球存储。那问题是什么?现在没问题了。最初,我想知道是否可能纯粹用cookie验证用户登录。现在我意识到这是不适用和不可行的。谢谢。在饼干上签名就够了吗?