Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 会话变量的替代方案是什么?_Asp.net_Asp.net 4.0 - Fatal编程技术网

Asp.net 会话变量的替代方案是什么?

Asp.net 会话变量的替代方案是什么?,asp.net,asp.net-4.0,Asp.net,Asp.net 4.0,会话变量在开发大型web应用程序时有哪些限制。 另外,会话变量的最佳替代方案是什么 请向我提供会话变量的备选方案由于会话状态中的数据存储在服务器内存中,因此在处理大量数据时不建议使用会话状态。会话状态变量会一直保留在内存中,直到您销毁它,所以内存中的变量太多会影响性能 会话变量和cookie是同义的。因此,如果用户已将其浏览器设置为不接受任何cookie,那么您的会话变量将无法用于特定的web冲浪者 当用户访问页面时,会创建每个会话变量的实例,这些变量在用户离开页面后会持续20分钟!(事实上,这

会话变量在开发大型web应用程序时有哪些限制。 另外,会话变量的最佳替代方案是什么


请向我提供会话变量的备选方案

由于会话状态中的数据存储在服务器内存中,因此在处理大量数据时不建议使用会话状态。会话状态变量会一直保留在内存中,直到您销毁它,所以内存中的变量太多会影响性能


会话变量和cookie是同义的。因此,如果用户已将其浏览器设置为不接受任何cookie,那么您的会话变量将无法用于特定的web冲浪者


当用户访问页面时,会创建每个会话变量的实例,这些变量在用户离开页面后会持续20分钟!(事实上,这些变量会一直持续到“超时”。此超时长度由web服务器管理员设置。我见过一些站点,这些变量会在3分钟内崩溃,其他变量会持续10分钟,还有一些变量会持续默认的20分钟。)因此,如果您在会话中放置任何大型对象(如ADO记录集、连接等),您在自找麻烦!随着访问者数量的增加,您的服务器将因在会话中放置大型对象而遭遇巨大的性能问题!

会话变量的优缺点要了解不使用会话的优势,您必须了解会话是如何工作的

在默认设置中

  • 会话由用户浏览器中的cookie集标识,并且
  • 会话数据存储在Web服务器的内存中
当用户向服务器发送请求时,会话cookie会随之发送。它包含服务器用来定位特定用户会话数据的标识符

您可以将ASP.NET配置为

  • 使用查询参数而不是cookies来存储会话标识符
  • 将会话数据存储在数据库中(如果您有多台服务器为您的站点提供服务,则为会话数据提供一个中央数据存储尤为重要)
现在了解禁用会话状态的优点:

  • ASP.NET通过序列化请求使对会话数据的访问线程安全。这意味着,当启用会话状态时,ASP.NET拒绝为来自同一用户的并发请求提供服务。当用户的浏览器发出大量ajax请求时,这尤其是一个问题。可以通过将会话状态标记为只读来缓解此问题不需要更新的请求
  • 当请求传入时,ASP.NET必须获取会话数据,并在请求结束时将数据写回。如果会话状态存储在内存中,这可能不是一个大问题,但如果数据存储在中央数据库中,这可能会导致严重的性能问题
  • 不用说,为大量用户存储大量数据会加剧这些问题

    有关更多信息,请参阅

  • (最后一篇文章有点过时,但仍然是一本好书)

    备选方案

    • 如果可以,请完全避免会话状态
    • 如果您必须将数据与用户关联,请使用HTTP机制,让浏览器在cookie或查询参数中携带数据(这是整个REST移动的部分内容)

    希望这能有所帮助。

    这取决于应用程序的业务逻辑在某些情况下,会话可能是最佳选择,但是有很多替代方案,如果您对应用程序的每个请求都有不同的数据,则应使用会话,您可以将数据与表单一起发布到隐藏字段中,但您的问题仍然很突出在这一点上,你必须分析你的需求,而不是根据它来决定是否使用会话或其他替代解决方案,如果我必须存储用户id,那么我肯定会使用会话,因为每个用户的id都不同,我不会像在会话中保留数据集那样在会话中保留非常大的数据很少有开发人员会这样做。还有一个问题是,如果您使用会话,而您希望将会话保存在进程中还是服务器中,如果您将会话保存在服务器中,成本非常高,但在某些情况下非常有用。

    @saratha您是否在4分钟内键入了所有单词???这非常令人惊讶::lol:p@saritha它的替代品呢(会话变量)…会话变量和cookie不是同义词。您的会话由cookie标识,因此您认为默认会话实现应启用cookie是正确的,但您可以执行无cookie会话。事实上,cookie是会话变量的替代品。虽然cookie很糟糕,但仍然是替代品。如果您需要传递/存储数据在一个页面中,你也可以使用ViewState。你链接到的帖子(Saritha显然是从中抄袭过来的)非常古老——它谈论的是经典ASP。但大多数情况下它仍然有效。MSDN杂志链接到2005年9月号的链接已断开。它们还提供了,包括你的文章。