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