ASP.NET Session详细介绍

本文深入探讨了Session机制在Web开发中的作用,解释了其如何解决HTTP协议的无状态性,以及如何在服务器端存储用户会话信息。文章还详细介绍了Session的开始、赋值、取值和销毁操作,以及其与Cookie的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

Session用于存储特定的用户会话所需的信息 。 Session对象的引入是为了弥补HTTP协议的不足,HTTP协议是一种无状态的协议。

Session中文是“会话”的意思,在ASP.NET中代表了服务器与客户端之间的“会话”。Session的作用时间从用户到达某个特定的Web页开始,到该用户离开Web站点,或在程序中利用代码终止某个Session结束。引用Session 则可以让一个用户访问多个页面之间的切换也会保留该用户的信息。

系统为每个访问者都设立一个独立的Session对象,用以存储Session变量,并且各个访问者的Session对象互不干扰。

Session与Cookie是紧密相关的。 Session的使用要求用户浏览器必须支持Cookie,如果浏览器不支持使用Cookie,或者设置为禁用Cookie,那么将不能使用Session。
Session信息对客户来说,不同的用户用不同的Session信息来记录。当用户启用Session时,ASP自动产生一个SessionID.在新会话开始时,服务器将SessionID当做cookie存储在用户的浏览器中。

Session

  1. 当会话过期或终止时,服务器就会清除 Session 对象
  2. Session提供了一种把信息保存在服务器内存中的一种方式。它能存储任何数据类型包括自定义对象。
  3. 每个客户端的Session是独立存储。
  4. Session 对象用于存储有关用户的信息。
  5. 在整个用户会话过程中都会保留此信息。(保存SessionId的cookie丢失之前)
  6. 当用户在应用程序中从一个网页浏览到另一个网页时,存储在 Session 对象中的变量不会被丢弃。
  7. Session只可由该会话的用户访问(因为SessionId的东东以cookie的方式保存访问者浏览器的缓存里了)
  8. 用户不能访问或修改他人的Session

Session的操作

  1. 开始并为Session赋值:Session[“uName”]=“CNYaoMing”;
  2. 取值:string strName = Session[“uName”].ToString();
  3. 销毁(取消/退出):Session.Abandon();//销毁服务器端的Session对象Session.Clear();//清空服务端的Session对象里的键值对,Session对象并没有从Session池里销毁

Session常用属性、方法

  1. SessionID:唯一用户会话标识符
  2. TimeOut:用户超时(单位:分钟),默认20分钟
  3. Count:会话状态集合中的项目数
  4. Abandon方法:用于显式结束会话

Session详解

  1. ASP.Net已经内置了Session机制。不要放太多的对象到Session(因为存储在服务器端fw的一个辅助进程里,不稳定,数据多了容易丢失。),Session会有超时销毁的机制,发帖(服务器不可能知道浏览器是否在开着,什么时候关闭),发帖计时,在线时间统计,靠请求来判断是否活着。Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session、Cookie)。不能放太大的数据,放的数据是object。如果浏览器禁用了Cookie可以启用Url来传递SessionID。
  2. 可以看到Session机制并不是Http协议规定的,是ASP.net实现的,现在PHP、JSP等大部分服务端技术都实现了Session,原理都差不多。
  3. Session有自动销毁机制(设置失效时间,默认就是滑动过期机制),如果一段时间内浏览器没有和服务器发生任何的交互,则Session会定时销毁。
             //写入
            Session["UserName"] = "joye888";
 
            //读取
            var userName = Session["UserName"].ToString();
            Response.Write(userName);
 
            //遍历
            IEnumerator sessionEnum = Session.Keys.GetEnumerator();
            while (sessionEnum.MoveNext())
            {
                Response.Write(Session[sessionEnum.Current.ToString()].ToString() + " ");
            } 
 
            //销毁
            Session.Abandon(); //结束会话
            Session.Clear();//不结束会话

 Session运行原理图解

 

Session数据存放的位置和形式

web.config 配置节点语法:

<system.web>
<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
</system.web>

mode:设置将Session信息存储到哪里

        Off:不使用Session功能; 

        InProc :将Session存储在IIS进程内,这是默认值,也最常用(优点是简单,性能最高。但是当重启IIS服务器时Session丢失。); 

        StateServer :将Session存储在ASP.NET状态服务进程中(重新启动Web应用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器。); 

        SQLServer :将Session存储在SQL Server中(存储在内存和磁盘中,服务器挂掉重启后都还在)。 

cookieless:设置客户端的Session信息存储到哪里

        ture 使用Cookieless模式;这时客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。

        false 使用Cookie模式,这是默认值。

timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟。 

stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。(默认端口42424)。 

sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=joye"。当mode的值是SQLServer时,这个属性是必需的。

stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值