当用户第一次访问您网站上的.NET URL(如.aspx页面,但不是.html或其他静态文件)时,新会话开始。该会话持续到它超时或应用程序被终止(重新启动/崩溃/再循环)。默认的.NET超时是20分钟;因此只要用户持续点击.aspx页面并且中断时间不超过20分钟,会话就会持续。
在此期间,您可以将信息存储在与该用户相关的Session对象中。它本质上是一个散列表,您可以使用您定义键的对象填充它。在你的情况下,你正在使用Session [“data”],但是你可以使用任何你想要的键,真的。
然而,会话以及存储在Session哈希表中的数据非常脆弱(请参阅上述所有方法)。你不应该依赖它来保留任何重要的东西,例如在Session_Start中不能轻易重建的东西。所以它确实服务于两个角色:维护状态(所以你知道它在每个页面中仍然是同一个用户);并作为用户特定的缓存,您可以将数据保存在内存中以更快地完成任务。
Session_Start每个会话只运行一次 - 根据定义。如果您需要通过多个会话识别单个用户,则需要使用更持久的方法,例如设置自己的Cookie,并且将来可能会失效。你可以在这样一个cookie中放入一个ID,让你知道这是用户12345(事实上,Session_Start只是寻找你的“永久”cookie并将你的关于该现有用户的数据连接到这个新会话的地方)。
如果要存储有关多个会话中存活的用户的数据,则必须将该数据存储在更永久的位置 - 数据库是最明显的解决方案。当他们回来时,您可以在Session散列表中缓存一些数据 - 而Session_Start也是这样做的地方。希望这可以帮助。
因此,如果用户保持活跃,直到然后用户停止使用应用程序的session_start将开始一次运行? – feronovak 2011-02-01 00:28:38