2

显然,我有自己的看法和方法,但我很想知道是否有更好的方法。

您如何管理登录,即在只为会员提供内容之前检查用户是否使用有效登录登录。

4

6 回答 6

4
  • 利用$_SESSION s
  • 用session_start()开始每一页;
  • 检查$_SESSION成员内容的自定义变量 ( $_SESSION['username'])
  • 如果未显示您的变量,请显示登录表单
  • 成功登录后设置$_SESSION['username']为当前登录用户的昵称

注意:这是管理登录的简要说明,有很多东西在这里没有描述。您应该避免不同的安全漏洞,如sql 注入会话劫持等)

于 2010-10-15T13:48:32.177 回答
2

曾几何时,我做了一个 Session 类,它在一个公共的包含文件中被实例化。它没有使用session_*and $_SESSION,而是使用了一个带有客户端 SID 的 cookie(我认为它是一个带有盐和一些迭代的 SHA-256 哈希)。在服务器上,客户端 SID 多次进入另一个散列函数以获取服务器端 SID,它是远程 MySQL 数据库中的主键。

为什么?因为该站点是在共享主机上,但会话需要安全,因为数据库保存了 18 岁以下人员的详细信息。PHP 默认/tmp用作将会话数据存储为序列化文件的地方,这意味着任何有权访问/tmp(即任何其他同一主机上的客户)可以访问会话数据的序列化形式,并可能使用它来显示经过身份验证。

这对我来说是学习会话处理、HTTP 标头等的好方法,而且使用起来感觉比标准的 PHP 方法好得多。

于 2010-10-15T14:09:14.723 回答
1

我检查身份验证cookie。

于 2010-10-15T13:40:49.217 回答
1

我不会再自己管理它了。有太多事情会出错。相反,我会像 stackoverflow.com 一样使用OpenID 。

于 2010-10-15T14:00:26.907 回答
1

我不知道这是否是最好的方法,但我习惯于创建用户类并在创建会话时创建对象。我将此对象存储到会话中,并且我习惯于将会话变量链接到环境变量,只是为了避免处理 $_SESSION 数组。这样,您可以将登录方法和登录状态保存在对象本身内部,以及与用户相关的所有信息(姓名、姓氏、访问级别等)

类似的东西:

include('user.class.php');
session_start();

if(!isset($_SESSION['user']))
{
   $_SESSION['user'] = new User();
}

$USER = &$_SESSION['user'];
于 2010-10-15T14:52:48.487 回答
0

这不是一篇新文章,但这个系统非常好。原始文章可能有一些更新。

于 2010-10-15T16:01:55.173 回答