2

我有一个必须编码的登录系统。但我不明白的是,即使没有记住我,我是否必须在客户端机器上存储 cookie?如果我将所有必需的信息存储在 Session 本身中并使用它来检查我的 BasePage 以查看用户是否经过身份验证,这不是更好和“安全”吗?

如果要构建记住我功能,那么它就需要 cookie,对吗?请对此有所了解。

4

3 回答 3

5

是的,你会的,或者你必须在你创建的每个链接的查询字符串上携带一些东西。Web 编程是完全无状态的。您真的不知道哪个用户正在请求哪个页面或已登录,除非您每次都给客户端(浏览器)一些东西发送回服务器。

如果你得到的请求只是“www.example.com/page.aspx”,那么你不知道那是我、我的兄弟、我的猫,还是其他一些随机的人。为了知道请求该页面的是我(因此被授权使用它),您必须使用会话 cookie 或在查询字符串上传递一个值。

于 2012-05-09T04:45:03.837 回答
2

问题是,HTTP 协议是无状态的,因此会话(以及请求之间的任何类型的持久性)需要每个连续的请求向服务器证明它确实来自前一个客户端。这样,您必须在请求中发送附加信息。对于会话,使用会话 id-s,通常通过 cookie 或将会话 id 作为 GET/POST 参数传递(非常不安全/不推荐)。因此,您需要用于会话的 cookie。

于 2012-05-09T04:45:46.547 回答
1

身份验证和授权不同于会话管理。至少 ASP.NET 团队是这么看的。在身份验证/授权失败的情况下,出于安全原因,系统不应访问任何资源,因为它可能导致 DOS 攻击。如果您使用 Session 来存储身份验证和/或授权的详细信息,并且会话来自 DB,那么即使是无效用户也会进行 DB 调用,这从安全角度来看并不好。因此,将事物用于它们的目的。

于 2012-05-09T04:50:51.503 回答