1

我想听听您对健壮的框架/代码(RoR、Zend、Symfony、Django ..)使用什么的建议。

我为我的用户管理系统(了解:登录、注销、用户登录、user_id、用户名等)使用了一个简单的小型框架(userCake)。我正在重构我的代码,使用 iPhone/Androi/Js 的 API,我想刷新这段代码。我需要知道我是否只是重新排列我的类、依赖项、类并保持相同的流程,或者我是否需要更改某些内容。

当前播放状态
用户成功登录后,我检索他的所有数据,对其进行序列化,创建一个 sessionID。我将此 sessionID 存储在用户 Cookie 中,并将所有序列化数据存储在链接 sessionID 和数据的数据库表中。

然后,在我的网站上,每次请求页面时,我都会从数据库中检索与用户在其 cookie/会话中的 sessionID 匹配的序列化数据。然后我进行查询以确保用户名和哈希密码在我的数据库中匹配并且我的用户仍然处于活动状态(未禁止或删除)。我的 api 也是如此(iphone、android、js 必须给我 sessionID)。

我有一个 cronjob 可以从我的会话表中删除过期的那个。当用户注销时,也是一样,我删除数据库中的行并清除用户Cookie。

我在寻找
什么 我上面解释的内容对我来说似乎很好。但它足够安全吗?每次使用用户名和密码一切正常时,是否真的需要双重检查数据库,我不能只信任会话表中的序列化数据吗?

这一切是如何在著名的框架(Django、Rails、Symfony ..)中完成的?

4

1 回答 1

1

第一的:

用户成功登录后,我检索他的所有数据,对其进行序列化,创建一个 sessionID。我将此 sessionID 存储在用户 Cookie 中,并将所有序列化数据存储在链接 sessionID 和数据的数据库表中。

当您“检索他的所有数据”时,这不是已经从数据库中了吗?为什么还要序列化数据并将其放回数据库的另一部分?为什么不将用户 ID 存储在会话变量中,并使用它来查询您可能需要的任何用户信息?

第二:

然后我进行查询以确保用户名和哈希密码在我的数据库中匹配

您在哪里获取每个请求以针对数据库进行测试的用户名和密码?听起来好像您正在测试用户并将您存储在数据库中的序列化与数据库中的原始信息相比较。如果是这样,这将始终匹配,因为您自己设置了它。

第三:

为什么要使用 cron 作业来删除过期的会话?会话具有内置的过期机制。

通常,您会希望使用指纹和/或趋势来保护您的会话。然后,您可以简单地将用户的主数据库键保存在会话变量中,并使用每个请求来检索您可能需要的任何用户数据。此外,您不需要自己创建会话 ID 并将其存储在 cookie 中。当您调用 session_start() 时,PHP 会为您处理此机制,然后将您想要保存的任何会话变量存储在 $_SESSION 超全局数组中。你提到的大多数框架都是开源的,所以如果你愿意,你可以查看他们的代码,亲自看看他们做了什么。

于 2011-07-03T19:11:09.183 回答