cookie 是否被视为无会话方法?

Are cookies considered a sessionless aproach?

当我们在应用程序中使用 cookie 时被认为是无会话设计?

我不完全理解无会话的真正含义。

是否表示会话未存储在服务器中或未使用会话对象?

这取决于你所说的 sessionless 是什么意思。 http 协议本身就是 stateless,因此在设计上是 sessionless。一个请求对它之前或之后的请求没有任何想法、关注或知识。如果需要,我们必须对状态进行分层。

如果另一方面你的意思是 sessionless state 那么这里的想法是避免使用像 InProc 这样稀缺的服务器资源,使用 RAMOutProc 比如 Sql ServerRedis 保持 sessions。

Cookie 是实现这一目标的一种机制。正如将 session 键存储在页面本身的隐藏表单字段或页面的其他方面一样。将 session 键存储在页面的查询字符串中是使用客户端 sessionStoragelocalStorage.

的另一种选择

我们可能会这样做的一个原因是因为服务器资源很昂贵,而且默认机制也是同步的。如果您在页面中使用大量 Ajax 并向控制器发出大量随机请求,那么这些请求将被同步排队和处理,因为:

session["mykey"] = "that"

实际上处理得更像

lock(sessionLock)
{
    session["mykey"] = "that"
}

所以会涉及排队,这可能是一个问题,具体取决于应用程序。

您还应注意 session 是易变的,因为如果工作进程 运行 您的站点回收(他们经常这样做)所有 session 都会丢失。因此,默认 ASP.Net session 对于任何存在此问题的现实世界应用程序几乎毫无用处。

所以选择 OutProc 在服务器上,或者 session-less 通过客户端。

显然,在客户端上使用 session-less 存在必须减轻的安全风险。因此,存储 session 的最佳位置始终取决于您正在设计的应用程序的要求。