没有会话没有cookie?

时间:2012-09-05 18:15:03

标签: asp.net-mvc-3

我在没有使用会话和不使用cookie的情况下访问用户信息存在问题。 如何在没有会话和没有cookie的情况下管理用户信息? 请帮忙

4 个答案:

答案 0 :(得分:2)

假设您正在谈论Web浏览器和HTTP:您不能。

HTTP是无状态协议。要使服务器端状态超载它,需要一些唯一标识请求者的方法。而cookie是Web浏览器维护客户端状态的唯一方式。

[编辑注意]但是,我应该指出,可以设想在URI中嵌入有限数量的状态数据,作为查询片段的一部分部分URI。它是有限的,因为大多数(每个?)实现对URI的最大长度施加了某种限制。此外,您的Web应用程序需要确保状态数据从URL正确传播到URL。它应该加密以保证安全,以免URI错误导致您的网站被破解。

答案 1 :(得分:0)

您可以使用MySQL数据库来存储用户信息。不幸的是,在不使用会话变量的情况下,您必须将用户的凭据传递给url变量,例如?username = dave password = cat(请不要这么做)或者您只需要学习一些有关安全性的内容。以正确的方式做事(首选)。

答案 2 :(得分:0)

这似乎是一个不必要的要求下面的警告,但我会小心翼翼。

当用户登录时,向他们发出安全令牌。将该令牌存储在数据库中。令牌应包含任意值(例如十六进制编码的GUID),一个名称或密码。数据库还存储令牌与实际用户ID之间的关系。令牌应该有一个到期日期。

将令牌与每个请求一起作为URL的一部分传递(ASP.Net为无cookie会话执行此操作)。由于您不想使用会话状态,因此您必须在其他位置存储与用户相关的任何信息,可能是数据库。每个页面上的每个URL都需要有令牌。

您还可以在网络浏览器中利用local storage获取非安全信息。

在ASP.Net中会话不切实际的情况,即使对于非常轻量级的对象也是如此。这是因为会话访问是如何序列化的;假设您有一个充满小部件的仪表板页面,向WCF端点发出请求,需要了解与会话相关的信息。如果该端点使用会话状态,则性能将受到影响,因为每个请求将以串行方式执行。

  

...如果为同一会话发出两个并发请求(通过使用   相同的SessionID值),第一个请求获得独占访问权限   会话信息。第二个请求仅在执行后执行   第一个请求已经完成。

http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx

答案 3 :(得分:0)

每个页面上的隐藏输入都可以做到这一点,但是你会因为一切而不是GET而使用POST。这是非常不推荐的。

相关问题