当我们在应用程序中使用cookie被认为是无会话设计时?
我完全不了解无会话的真正含义。
是否意味着会话未存储在服务器中o未使用会话对象?
答案 0 :(得分:0)
这取决于sessionless
的含义。 http
协议本身就是stateless
,因此设计为sessionless
。一个请求在其之前或之后都不知道,关注或了解请求。如果我们需要,我们必须将状态分层。
另一方面,如果您的意思是sessionless state
,那么这里的想法是避免使用稀缺的服务器资源,例如InProc
使用RAM
或OutProc
,例如Sql Server
}或Redis
举行会议。
Cookie是实现这一目标的一种机制。就像将会话密钥存储在页面本身中一样,隐藏在表单字段或页面的其他方面。将会话密钥存储在页面的查询字符串中是另一种选择,就像使用客户端sessionStorage
或localStorage
一样。
我们可能会这样做的原因是服务器资源很昂贵且默认机制也是同步的。如果您在页面中使用了大量Ajax
并向控制器发出大量随机请求,那么这些请求将会同步排队并处理,因为:
session["mykey"] = "that"
实际上更像是处理
lock(sessionLock)
{
session["mykey"] = "that"
}
因此将涉及排队,并且根据应用程序,这可能是一个问题。
您还应该注意,会话是不稳定的,因为如果运行您的站点的工作进程回收(他们经常这样做),则所有会话都将丢失。因此,默认的ASP.Net会话对于任何现实世界的应用程序来说都是无用的。
因此,在服务器上选择OutProc
,或者通过客户端选择session-less
。
显然,在客户端上使用session-less
会带来必须减轻的安全风险。因此,存储会话的最佳位置始终取决于您正在设计的应用程序的要求。