我正在开发 asp.net (4.0) 网站。我试图使用表单例份验证()。显然是在试图确保某些页面的安全。我的理解是,最好的安全解决方案是设置 cookieless="UseCookies",这样它就不会将 id 写入 URL。
我的问题是当我使用 cookieless="UseCookies"时到底发生了什么。
- 是否创建了 session 并在浏览器中存储了一些 id(~内存,稍后用于从 IIS 服务器端 session “cookie”中提取信息),或者它实际上是创建“常规”客户端加密 cookie 的配偶?
(我显然试图避免写入 URL 和客户端 cookie - 不确定是否可以避免所有这些)
- 如果在浏览器中设置了 ID,则所有浏览器都允许在其中存储 session ID。如果浏览器不允许,会发生什么?有没有办法预先检查一下?
所以我想,作为我们所有人,我只是想构建适当的安全应用程序,如果有人有任何其他建议,我们将不胜感激。
坦克很多,
最佳答案
如果您允许 cookie,请设置 cookieless="false",sessionID 将存储在 cookie 中,并且在整个 session 期间(默认为 20 分钟)都可以访问它。
如果您允许cookie并且用户将在浏览器中禁用cookie,则sessionID将不会存储在任何地方,并且每次用户创建新请求(通过转到另一个页面)时,他都会获得新的sessionID,因此没有数据可以被保存。
您可以使用 cookieless="true"来加密 sessionID 并将其附加到 url 中,以便用户即使启用了 cookie,也能够保留 session 。
还有一个 cookieless="AutoDetect",它将确定用户是否禁用或启用了 cookie,并基于此将创建一个带有 sessionID 的 cookie 或将其扔到 URL。这样做的缺点是,对页面的每个请求都会产生 3 个请求,一个请求确定用户是否启用了 Cookie,附加一个带有第一个请求结果的查询字符串,第三个请求将用户带到适当的 URL。
还有一个设置可以根据浏览器的数据关闭和打开 cookieless。因此,如果有人使用 10 年前的手机浏览您的页面,它可能会将 Cookie 附加到 URL,因为该设备上没有允许 Cookie 的选项。
我希望这有帮助。我个人会向用户发送消息以启用 cookie,甚至不用担心其他情况,但有些人(例如我的老板)不喜欢这个想法并希望每个人都支持。
关于ASP.NET - cookieless=UseCookies - 浏览器中只有 session ID?没有客户端cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10125876/