这是关于某个概念的一个非常基本的问题。
Web服务器(如IIS或Apache)上下文中会话的定义是什么。什么是物理和逻辑上的会话?
如何确定会话已启动或已结束?使用 服务器端 计时器还是什么?
答案 0 :(得分:2)
在网络术语中,会话是用户访问网站,当用户在网站上导航时,可能包含多个页面视图和交互。用户所做的选择和任何输入的数据可以在会话期间保存并重新显示或用于在会话期间相应地定制用户体验。关键是Session代表用户和站点之间的一组交互,而不是简单的服务静态页面运行。会议预计只会持续很短的时间;如果用户停止向网站发出请求,则会在几分钟后认为会话结束。
HTTP是无状态的,因此就浏览器和Web服务器之间的关系而言,会话不作为物理实体存在。
逻辑,ASP.NET通过识别用户对网站的定期调用来模拟会话,并在调用之间保留会话状态信息。
通过在用户首次调用网站时为cookie中的每个用户分配唯一标记(“会话ID”)来实现此目的。用户每次调用该站点时,都会显示该cookie。 ASP.NET识别它并从持久性介质中调用该令牌的任何持久会话数据(ASP.NET将其存储在服务器端,无论是在内存中,还是在状态服务器中,还是在SQL数据库中)。应用程序可以在HTTP请求的生命周期内读取和修改会话数据,通常是响应用户的操作。在请求结束时,会话数据将返回到持久性介质。
通过这种方式,可以保持开放,连续的会话的错觉。会话的开始很容易判断 - 这是第一次向用户提供令牌,并且会话记录存储在具有时间戳的持久性介质中。关于会话何时结束没有简单的答案,因为HTTP自然是无状态的。因此,我们必须假设在没有用户返回站点的情况下经过给定时间量时应该关闭会话。这只能通过cookie过期或通过使用我们选择的任意超时与会话数据上的时间戳进行比较从持久性介质中删除会话记录来强制执行。 ASP.NET中的默认值为20分钟。
一个有趣的观点是,当使用SQL Server作为ASP.NET的会话持久性介质时,它使用计划的SQL Server代理任务来清除过期的会话。但是,如果代理未运行或不支持(例如,在SQL Server Express版本的情况下),则不会清除过期的会话,因此只要用户持续呈现相同的会话令牌,会话就不会结束。实际上,会话将在用户关闭浏览器时结束,因为cookie 应然后自动丢弃。
然而,要回答您的具体问题,请注意我一直在讨论应用程序服务器(ASP.NET)上下文中的会话。 Web服务器(IIS)根本没有会话概念 - 它所扮演的唯一部分是在将请求传递给ASP.NET时提供和读取cookie。
答案 1 :(得分:2)
物理上,它的内存空间用于维护客户端和服务器之间的某种连接状态。在ASP.NET上,会话对用户来说是唯一的;这与Cache不同,后者是应用程序的所有用户共享的内存空间。
通常会话是通过cookie维护的(服务器将cookie发送到包含唯一会话ID的客户端浏览器)但是当浏览器不接受cookie时,它通常通过以下形式的url参数进行维护: http://site.com?SessionID=312da312312
。服务器使用此SessionID来跟踪谁正在建立连接。
逻辑上,Wikipedia对这个概念有一个很好的解释:
在计算机科学,尤其是网络中,会话就是一个 半永久性互动信息交换,也称为 两个或更多之间的对话,对话或会议 通信设备,或计算机和用户之间(请参阅登录 会话)。在某个时间点建立或建立会话 时间,并在以后的时间点拆除。一个成熟的 通信会话可能涉及每个中的多个消息 方向。会话通常是有状态的,但并不总是有意义的 至少有一个通信部分需要保存信息 关于会话历史,以便能够进行通信,如 反对沟通所包含的无国籍沟通 有回应的独立请求。
已建立的会话是执行a的基本要求 面向连接的通信。会议也是基本步骤 以无连接通信模式发送。无论如何 单向传输不定义会话1。
答案 2 :(得分:0)
以下是MSDN link
基本上有3种不同的存储会话方式。在进程/状态服务器/ SQL中。
In Process存储在IIS中,如果您回收或重新启动Web服务器,则会丢失。它是最快的,但它不会持久。
状态服务器:它是一个与您的.NET应用程序无关的进程外工作进程。但是,如果您的服务器重新启动,则会丢失该会话,但您可以重新启动应用程序池
SQL:它存储在SQL中并且一直存在。