session的值可以在你的整个周期内有效,除非你的session超时等其他原因,所以SESSION的值是可以传递到第二个页面的.不需要配制,如给一个session赋值:this.Session["SessionName"]="abc";
取Session的值为
string a=this.Session["SessionName"];
取Session的值为
string a=this.Session["SessionName"];
解决方案 »
- 请教如何得知repeater控件循环了几次?
- 刷新问题?
- 读取数据库表格字段 生成 CheckBox,非常急 请各位高手指点 在线等,谢谢啊!分数不够可以再加!请各位帮帮忙!
- 如何播放.rm
- FreeTextBox保存内容,在页面上用DIV来显示时,字体会随浏览器的字型设置改变而改变,要怎么解决
- 谁能告诉我:在深圳做ASP.NET(C#)和ASP工资分别是多少?
- 请教ASP.NET C#中,如何实现Windows程序中那种对话框的设计
- 水晶报表问题:不能显示生成的统计图,只能显示文字
- 。NET高手请进
- 北京西直门附近某公司招聘asp.NET程序员
- 请大家讨论除了用存储过程来提高asp.net页面的速度,请还有什么方法??!!来者有分
- 问题请教dll加载的问题
第二页:dim aaa as string =session("变量名")
Session.Add("Name",ss);
--------------------------
string tt = Session["Name"].ToString();//取的Session中的值
Session["IsLogin"]=true;在其他页面中我要验证用户是否登陆
if(!Session["IsLogin"])
Response.redirect "/login.aspx"但是运行时出现function 'Session.get_item' evaluated and return NULL
if( o==null || !((bool)o) )
Repsonse.Redirect( "/login.aspx" );
将会话范围的数据存储在服务器上以供跨多个浏览器请求使用。
引发适当的可在应用程序代码中处理的会话生存期管理事件(Session_OnStart、Session_OnEnd 等)。
如果浏览器不在指定的超时时间内重新访问应用程序,则自动释放会话数据。
本主题提供会话状态的概述;介绍如何标识和跟踪活动 ASP.NET 会话;解释会话状态存储和一般结构;并以一个高级代码示例作为总结。会话状态概述
HTTP 是一个无状态的协议,这意味着它不自动指示一个请求序列是否都来自相同的客户端,甚至不指示单个浏览器实例是否仍活跃地查看某个页或站点。结果,在没有其他基础结构帮助的情况下生成需要维护某些跨请求状态信息(购物车、数据滚动等)的 Web 应用程序可能会非常复杂。ASP.NET 提供以下会话支持: 便于使用的会话状态功能,该功能是 ASP 开发人员所熟悉的,与其他 .NET 框架 API 兼容。
可靠的会话状态功能,可以经受得住 Internet 信息服务 (IIS) 重新启动和辅助进程重新启动而不丢失会话数据。
可缩放的会话状态功能,该功能可用于网络场(多计算机)和网络园(多进程)两种情况,使管理员可以将更多的处理器分配给 Web 应用程序以提高它的可缩放性。
用于不支持 HTTP Cookie 的浏览器的会话状态功能。
对于核心会话状态方案,其吞吐量相当于(或高于)ASP 的吞吐量(当向购物车放入项时 50/50 读/写,修改访问的最后一页,验证信用卡详细信息等)。
标识会话
每个活动的 ASP.NET 会话都是使用 120 位的 SessionID 字符串进行标识和跟踪的,该字符串只包含 URL 中所允许使用的 ASCII 字符。SessionID 值是使用保证唯一性(这样会话不会冲突)和随机性(这样怀有恶意的用户不能使用新 SessionID 来计算现有会话的 SessionID)的算法生成的。根据配置应用程序设置的方式,通过 HTTP Cookie 或嵌套有 SessionID 字符串的修改的 URL 跨客户端-服务器请求与 SessionID 字符串进行通讯。会话状态存储
ASP.NET 提供一个简单、易于使用的会话状态模型,您可以使用该模型跨多个 Web 请求存储任意数据和对象。它使用基于字典的、内存中的对象引用(这些对象引用存在于 IIS 进程中)缓存来完成该操作。在进程外模式中,.NET 状态服务器只是将会话状态存储在内存中,而不是保存实时对象。在这种模式中,辅助进程直接与状态服务器对话。在 SQL 模式中,会话状态存储在 SQL Server 数据库中,辅助进程直接与 SQL 对话。ASP.NET 辅助进程这时能够利用该简单的存储服务,方法是在每个 Web 请求结束时在客户端的 Session 集合中(使用 .NET 序列化服务)序列化并保存所有对象。当客户端重新访问服务器时,相关的 ASP.NET 辅助进程从状态服务器中以二进制流的形式检索这些对象,将它们反序列化为实时实例,并将它们放置回对请求处理程序公开的新 Session 集合对象。通过有效地将会话数据的存储与应用程序对它的使用分开,ASP.NET 支持许多功能强大的方案,而这些方案对于 ASP 的早期版本是不可用的: 因为用于会话状态的内存不在 ASP.NET 辅助进程中,所以可以实现从应用程序故障的恢复。
因为所有状态与个别辅助进程不存储在一起,所以如果由于访问冲突导致进程故障,或者在出现死锁或内存泄漏的情况下进程被 IIS Admin Service 强行重新启动,状态也不会丢失。 跨多个辅助进程对应用程序进行分区。
因为所有状态与辅助进程不存储在一起,您可以干净地跨多个进程对应用程序进行分区。这种分区可以显著地提高多个进程的计算机上应用程序的可用性和可缩放性。此外,因为它将每个辅助进程与单个计算机关联起来,所以 ASP.NET 能够消除跨处理器锁争用,这是 ASP 早期版本中主要的可缩放性瓶颈之一。 跨多个网络场计算机对应用程序进行分区。
因为所有状态与辅助进程不存储在一起,所以您可以跨运行于多个计算机上的多个辅助进程对应用程序进行分区。在运行于不同计算机上的辅助进程和状态服务间传达状态的模型与运行在相同计算机上的进程和服务器间传达状态的模型几乎是相同的。不管是哪种情况,每个网络场只能有一个状态服务器。 会话状态结构
基于 ASP.NET 的应用程序使用基于事件的执行组织启用多个 .NET 框架类模块来参与单个 Web 请求的处理。SessionState 模块
.NET 框架通过 SessionStateModule 类(从 IHttpModule 派生)实现会话状态,该类参与基于 .NET 的应用程序所接收的每个请求的执行。SessionStateModule 负责生成或获得唯一的 SessionID 字符串,并负责存储状态数据和从外部状态提供程序检索状态数据。会话状态集合
SessionState 类公开两个状态集合:Contents 和 StaticObjects。Contents 集合公开已直接通过代码添加到会话状态集合的所有变量项。例如:[Visual Basic]
' Visual Basic code from within a page, a handler, or Global.asax.
Session("Message") = "MyMsg"
Session("AppStartTime") = Now
[C#]
// C# code from within a page, a handler, or Global.asax.
Session["Message"] = "MyMsg";
Session["AppStartTime"] = DateTime.Now;
为了与 ASP 的早期版本兼容,还可以通过应用程序对象上的 Contents 属性访问这些值,如下面的示例所示:[Visual Basic]
' Visual Basic code from within a page, a handler, or Global.asax.
Session.Contents("Message") = "MyMsg"
Session.Contents("AppStartTime") = Now
[C#]
// C# code from within a page, a handler, or Global.asax.
Session.Contents["Message"] = "MyMsg";
Session.Contents["AppStartTime"] = DateTime.Now;
StaticObjects 集合公开所有已经通过 Global.asax 文件中带有“Session”范围的 <object runat="server"> 标记添加到会话状态集合的变量项。例如:' Global.asax definition.
<OBJECT RUNAT="SERVER" SCOPE="SESSION" ID="MyInfo" PROGID="Scripting.Dictionary">
</OBJECT>
对象不能从 ASP.NET 应用程序内的其他任何地方添加到 StaticObjects 集合中。如果用户试图直接通过代码添加对象,则集合将引发一个 NotSupportedException。注意 ASP.NET 页编译器在页编译时自动将成员引用插入存储在 StaticObjects 集合中的所有对象。
页开发人员可以在页请求时直接访问 Session 对象,而无需通过 StaticObjects 集合,如下面的示例所示:<html>
</body>
Number of entries: <%= MyInfo.Count %>
<body>
</html>
会话状态配置和启动
在开始使用将存储会话状态的状态服务器和 SQL Server 之前,必须配置会话状态。配置
ASP.NET 通过两个阶段配置会话状态。首先,将会话状态模块插入 HTTP 请求。默认情况下,这是在整个计算机 Machine.config 文件中配置层次结构的根完成的。<httpmodules>
...
<add name="sessionState" type="System.Web.State.SessionStateModule" />
...
</httpmodules>
然后,将会话状态服务的运行时参数设置为 <sessionState> 配置元素的属性。服务器启动
若要使用状态服务器,您必须首先确保 ASP.NET 状态服务运行在用于会话存储的远程服务器上。ASP.NET Premium 版将该服务安装在以下位置:<Drive>:\Program Files\ASP.NET\Premium\V1.0Beta2\aspnet_estate.exe在应用程序的 Web.config 文件中将连接字符串指定为 stateConnectionString="tcpip=sarath:42424"。请注意,该模式将为区分大小写的格式 mode="StateServer"。若要使用 SQL Server,首先在具有将存储会话状态的 SQL Server 的计算机上运行 InstallSqlState.sql。默认情况下,它被安装在以下位置:<Drive>:\WINNT\Microsoft.NET\Framework\v1.0.2914这将创建包括许多存储过程的名为 ASPState 的数据库,并将 ASPStateTempApplications 和 ASPStateTempSessions 表添加到 TempDB 数据库。然后在应用程序的 Web.config 文件中将 SQL 连接字符串指定为 sqlConnectionString="data source=sarath;user id=sa;password=MyPassword"。请注意,该模式将为区分大小写的格式 mode="SQLServer"。高级代码示例
下面的示例显示如何以只读方式访问现有的会话状态数据,以动态生成包含用户信息和个人股票证券信息的页。[Visual Basic]
<%@ Language=VB EnableSessionState=true %>
<html>
<head>
<script runat="server">
Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)
' Obtain data table of user's personal stock data.
Dim MyStocks as DataTable
Dim Stock as DataRow
MyStocks = _
CType(Session("PersonalStockData"), DataTable)
' Update HTML output with session values.
Name.InnerText = Session("FirstName").ToString()
SpouseVal.InnerText = Session("SpouseName").ToString()
For Each Stock In MyStocks.Rows
StockList.AddItem(Stock("Symbol") & ": " & Stock("Name"))
Next
End Sub
</script>
</head>
<body>
Hi <span id="Name" runat=server/>, your spouse is: <span id="SpouseVal" runat="server"/>.
Here are the stocks you and your spouse currently own:
<acme:listbox id="StockList" runat="server">
<! — List box is dynamically populated from code. -->
</acme:listbox>
</body>
</html>
[C#]
<%@