`
北极的。鱼
  • 浏览: 159297 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】session的存储方式和配置

 
阅读更多

转自:http://www.cnblogs.com/zhangkai2237/archive/2012/03/22/2410890.html

 

  Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。我们控制用户去权限中经常用到Session来存储用户状态,这篇文章会讲下Session的存储方式、在web.config中如何配置Session、Session的生命周期等内容。

 

  1、Session的存储方式。

  session其实分为客户端Session和服务器端Session。

  当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。

  其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。

 

  我们大多数提到的Session都是指服务器端Session。他有三种存储方式(自定义存储在这里不做讨论):

  1.1保存在IIS进程中:

  保存在IIS进程中是指把Session数据保存在IIS的运行的进程中,也就是inetinfo.exe这个进程中,这也是默认的Session的存方式,也是最常用的。

  这种方式的优点是简单,性能最高。但是当重启IIS服务器时Session丢失。

 

  1.2.保存在StateServer上

  这种存储模式是指将Session数据存储在一个称为Asp.Net状态服务进程中,该进程独立于Asp.Net辅助进程或IIS应用程序池的单独进程,使用此模式可以确保在重新启动Web应用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器。

 

  1.3.保存在SQL Server数据库中

  可以配置把Session数据存储到SQL Server数据库中,为了进行这样的配置,程序员首先需要准备SQL Server数据服务器,然后在运行.NET自带安装工具安装状态数据库。

  这种方式在服务器挂掉重启后都还在,因为他存储在内存和磁盘中。

  下面是这三种方式的比较:



 


  2、在web.config中配置Session
 

  Web.config文件中的Session配置信息:

 

<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"/>

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

 

    — Off 设置为不使用Session功能;

    — InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值;

    — StateServer 设置为将Session存储在独立的状态服务中;

    — SQLServer 设置将Session存储在SQL Server中。

  

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

    — ture 使用Cookieless模式;这时客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。比如网址为http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx

    — 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=northwind"。当mode的值是SQLServer时,这个属性是必需的。

 

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

 

  下面来说下用StateServer和SqlServer来存储Session的方法

  2.1 StateServer

  第1步是打开状态服务。依次打开“控制面板”→“管理工具”→“服务”命令,找到ASP.NET状态服务一项,右键单击服务选择启动。

  如果你正式决定使用状态服务存储Session前,别忘记修改服务为自启动(在操作系统重启后服务能自己启动)以免忘记启动服务而造成网站Session不能使用

  第2步,在system.web节点中加入:stateNetworkTimeout="20">  stateConnectionString表示状态服务器的通信地址(IP:服务端口号)。由于我们现在在本机进行测试,这里设置成本机地址127.0.0.1。状态服务默认的监听端口为42422。当然,您也可以通过修改注册表来修改状态服务的端口号。

  (修改注册表来修改状态服务的端口号的方法:在运行中输入regedit启动注册表编辑器—依次打开HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParameters节点,双击Port选项—选择基数为十进制,然后输入一个端口号即可。)

 

  2.2 SqlServer

  在SQL Server中执行一个叫做InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库,及一个维护Session信息数据库的SQL Server代理作业。我们可以在以下路径中找到那个文件:

[system drive]\winnt\Microsoft.NET\Framework\[version]\ 

然后打开查询分析器,连接到SQL Server服务器,打开刚才的那个文件并且执行。稍等片刻,数据库及作业就建立好了。这时,你可以打开企业管理器,看到新增了一个叫ASPState的数据库。

  修改mode的值改为SQLServer。注意,还要同时修改sqlConnectionString的值,格式为:sqlConnectionString="data source=localhost; Integrated Security=SSPI;"(这种是通过windows集成身份验证)

 

  3、Session的生命周期

  Session的生命周期其实在第一节已经讲过了,和不同的存储过程有关。

 

  4、遍历以及销毁Session

  4.1遍历:

System.Collections.IEnumerator SessionEnum = Session.Keys.GetEnumerator();
while (SessionEnum.MoveNext())
{
    Response.Write(Session[SessionEnum.Current.ToString()].ToString() + " ");
}

 4.2 销毁:Session.Abandon()。

  • 大小: 16.7 KB
分享到:
评论

相关推荐

    asp.net 的Session数据库存储方式

    通过配置Web.config文件中的`&lt;sessionState&gt;`节点,开发人员可以轻松地切换Session存储的位置。虽然这种方法会带来额外的网络延迟,但考虑到其在可用性和扩展性方面的优势,对于大多数企业级应用来说,这是一个值得...

    session配置secure和httpOnly

    本文重点讨论的是Cookie中的两个重要属性:`secure`和`httpOnly`,以及它们在实际应用中的配置和注意事项。 一、属性详解 1. `secure`属性:当设置为`true`时,Cookie只会通过HTTPS安全协议发送到服务器。这意味着...

    session的存储方式和配置方法介绍

    - 根据应用规模和需求选择合适的Session存储方式。 - 注意Session的生命周期管理,合理设置超时时间,防止因长时间未活动导致的无效会话。 总结,理解并正确配置Session的存储方式和生命周期是构建健壮Web应用程序...

    tomcat-redis-session-manager实现session共享 配置文件

    在分布式系统中,Session共享是一个常见的需求,尤其是在使用Tomcat这样的Servlet容器时。"tomcat-redis-session-manager"是一个解决方案...在实际开发中,结合合理的配置和监控,可以大大提高系统的稳定性和用户体验。

    PHP Session的配置与应用

    1. **设置Session变量**:通过`$_SESSION`全局数组,我们可以存储和读取Session数据。例如,`$_SESSION['username'] = 'John';`将用户名存储在Session中。 2. **读取Session变量**:同样通过`$_SESSION`数组,我们...

    Tomcat7集群实现共享session,已配置好。

    总之,通过合理配置Tomcat集群和使用Redis作为session存储,我们可以实现跨服务器的session共享,确保用户在多台服务器间的会话一致性。这个压缩包提供了一个预配置的解决方案,对于快速搭建和测试session共享环境...

    Memcached-Session-Manager多tomcat实现session共享配置

    文档通常会包含详细的配置示例、性能优化建议以及常见问题的解答,对理解和使用Memcached-Session-Manager非常有帮助。 总结,Memcached-Session-Manager通过将Session数据存储在Memcached中,为Tomcat集群提供了...

    php mysql数据库 存储session

    在IT行业中,PHP和MySQL是两个非常重要的工具,它们经常被用来构建动态网站和Web应用程序。... 首先,让我们了解一下session的基本概念。...开发者需要权衡这些因素,根据项目需求选择最适合的session存储方式。

    Springboot实现多服务器session共享

    2. 配置Redis服务器,用于存储Session数据。 3. 在应用程序中使用Spring Session代替传统的HTTPSession。 4. 使用Nginx或其他反向代理服务器来管理多个实例,并将请求分发到不同的实例上。 结论 Springboot实现...

    redis+session配置

    Redis+Session配置是Web应用程序中实现会话共享的一种常见策略,尤其在分布式系统中,能够有效地提高系统的可扩展性和性能。以下将详细讲解这个过程涉及的关键知识点,以及提供的压缩包文件在其中的作用。 首先,...

    解决Spring session(redis存储方式)监听导致创建大量redisMessageListenerContailner-X线程问题

    通过Spring Session,开发者可以很容易地将session存储迁移到Redis、MongoDB、Hazelcast等外部存储系统。 在本文的背景中,使用Redis作为存储方式时,由于Spring Session的监听机制,可能会导致创建大量的...

    java_session共享配置.jar

    `java_session共享配置`涉及到的关键技术是利用Redis作为分布式session存储,配合Apache Commons Pool管理连接池,以及自定义的Tomcat session管理器,实现跨服务器的session共享,提高Web应用的可扩展性和可用性。...

    SSM项目集成shiro搭建session共享

    在这个项目中,Spring负责配置和管理bean,以及提供与Shiro的集成支持。 3. **Mybatis**:Mybatis3.4是一个持久层框架,它允许开发者编写SQL语句并与Java代码直接交互,消除了传统JDBC的繁琐步骤。Mybatis通过XML或...

    Session丢失原因和解决方案

    ASP.NET Session 丢失通常是由多种原因引起的,包括进程重启、Session超时、配置文件更改、应用程序更新或杀毒...通过选择合适的Session存储模式、优化配置以及正确处理对象序列化,可以有效地避免Session丢失问题。

    Tomcat8 session同步测试,配置好的Tomcat

    1. 创建一个简单的Web应用,使用session存储用户信息。 2. 在两台或多台Tomcat服务器上部署该应用,配置好集群设置。 3. 通过浏览器访问应用,设置session变量。 4. 切换到不同的服务器,检查session变量是否仍然...

    redis-tomcat7-session共享配置文档及依赖包

    本文将详细讲解如何通过Redis实现Tomcat7的session共享,并介绍相关配置和依赖包。首先,我们来看一下核心的组件:Redis、Tomcat7以及session管理。 Redis是一个开源的、基于内存的数据结构存储系统,它可以作为...

    Cookie、Session和Token三者的区别及使用

    - Session: 相对安全,但依赖于服务器的安全配置。 - **适用场景**: - Token: 适用于API认证、移动应用等需要跨域访问的场景。 - Session: 适用于需要维护用户会话状态的传统Web应用。 #### 六、总结 - **Cookie...

    vs.net 配置session.docx

    这个元素有多个属性,可以用来配置 Session 的存储方式、超时时间、cookie 信息等。 Mode 属性 Mode 属性是 `&lt;sessionState&gt;` 元素的必填项,它规定了 Session 信息的存储方式。有四种选项可供选择: 1. Off:...

Global site tag (gtag.js) - Google Analytics