`

【状态保持】会话状态Session解析以及原理分析

    博客分类:
  • java
 
阅读更多
来源http://www.cnblogs.com/wlitsoft/archive/2012/05/07/2488818.html



    我们知道web网站在客户端存储数据有三种形式:1. Cookie   2. hidden(隐藏域) 3.QueryString 其中viewstate什么的都是通过第二种方式隐藏域存储滴。

          客户端存储数据有三种形式,那服务器端有几种呢? 嘿嘿 服务器端有:1. Session 2. Application 3. database 4. caching(缓存) 其中session用的较多,当然数据库是必须的。

      好今天的主角是session,开发过管理系统项目(不限大小)的童鞋应该都接触过session,在管理系统中session最典型的应用就是当用户登录后在服务器端记录客户的唯一标示(比如用户名),然后再另外的页面中使用这个信息,当然也能判断用户是否登录后进入的系统,防止没有授权直接进入系统。

先看一下怎么使用session吧

           //添加一个名为sessionTest的Session并且给他赋值
        Session["sessionTest"] = "test";
           //读取Session名为sessionTest的值
        Response.Write(Session["sessionTest"].ToString());

      1. 很简单吧!除了人为的创建session,还有就是当客户端浏览器访问一个站点的时候,服务端会自动创建一个session来存储客户端的信息,那么问题来了服务端不可能就一个客户端访问吧!会有成千上万的客户端访问它,那么问题又来了,服务端怎么区分不同的客户端呢?
      1.1 说到这就要引入一个新的名词了什么呢 ? 没错 sessionID,那么什么是sessionID呢?

      简单的说当客户端第一次访问某个站点的时候,将会在服务端生成一个唯一的Key,然后发送给客户端,在服务器端通过Key来取得相应的数据。通常,我们将这个key称为SessionID。

      1.2 大家都知道HTTP是无状态的,那么这个sessionID保存到客户端的什么地方呢?想想客户端“我们知道web网站在客户端存储数据有三种形式:1. Cookie   2. hidden(隐藏域) 3.QueryString”   ,这三个你觉得那个更有可能,没错是cookice,当然当客户端禁用cookice的情况先就会采用存储在QueryString中。

     2. 服务端的session

         2.1 在页面对象或者HttpContext对象中,都有一个名为Session的属性,在一次会话中,它们引用的都是同一个对象,定义如下

public virtual HttpSessionState Session { get; }

              在往上来看看HttpSessionState怎么定义的

public sealed class HttpSessionState : ICollection, IEnumerable

             2.1.1 从这个类中我们可以找到操作session 的一些方法,下面是一些常用的方法
复制代码

1 public void Abandon();
2 public void Add(string name, object value);
3 public void Clear();
4 public void Remove(string name);
5
6 public object this[int index] { get; set; }
7 public object this[string name] { get; set; }

复制代码

从字面意思上就大概知道是什么方法,所以我就不一一解释了,看到6,7行可以知道session可以通过索引的方式访问。
            2.1.2 这个HttpSessionState来自于SessionStateModule。在每次请求处理过程中,HttpApplication在请求的处理管道中会检查当前请求的处理程序是否实现了接口IRequiresSessionState,如果实现了,那么SessionStateModule将为这个请求分配HttpSession。同时SessionModule还负责SessionID的生成  CookIeless会话管理。顺便提一下在使用一般处理程序的时候,默认情况下并没有实现这个接口,所以,如果在一般处理程序中使用Session必须实现IRequiresSessionState接口否则会导致异常。

      3. 客户端的SessionID
          第一次访问某站点的报文

      从相应报文中可以明显的看到服务端为客户端添加了一个Cookice,所以这个Cookice的值就为SessionID,还可以看到服务端并没有指定这个Cookice的过期时间所以这个Cookice会存储在内存中当浏览器关闭后,Cookice会立即消失。

     第二次访问

     从请求报文中很明显的看到,客户端想服务端发送了一个名为ASP.NET_SessionId的Cookice

-------------------------------------------------------------
感谢您看完本篇博文!!!!

互联网产品永远是Beta版,没有做不到的只有想不到的。
李亮和大家共同学习共同进步,如有什么疑问或博文有什么错误知识,请您斧正。
您可以给我发邮件,也可以再文章下面留言我会第一时间回复您。
分享到:
评论

相关推荐

    Session

    Session的主要优点在于它可以跨多个页面保持用户状态,但缺点是如果会话过多,服务器内存压力会增大,且如果用户禁用Cookie,Session管理可能会失效。 描述中提到的链接指向了一个博客文章,虽然具体内容未给出,但...

    session 状态 失效

    源码分析通常包括Session的生命周期、何时以及为何会被清除,而工具可能涉及用于调试和监测Session状态的实用程序。 "没有启动ASP.NET State Service错误的解决方法"这一文档标题揭示了一个常见原因:如果ASP.NET...

    深入解析Session工作原理及运行流程

    "深入解析Session工作原理及运行流程" Session是Web应用程序中的一种常见技术,用于维持服务器端的数据存储。下面我们将深入解析Session的工作原理及运行流程。 Session的概念和特点 Session是指在计算机中,...

    Express-Session源码分析

    然而,构建Web应用程序时,会话管理是必不可少的一部分,它允许服务器在多个请求之间保持用户状态。Express-Session作为Express框架的一个中间件,就是用于处理这个问题的利器。本文将深入剖析Express-Session的源码...

    java session

    本文详细介绍了Java Session的基本概念、工作原理以及在Tomcat环境下可能遇到的问题及其解决方案。通过合理的配置和对对象的序列化处理,可以有效避免因Session管理不当而导致的异常,提高系统的稳定性和用户体验。 ...

    PHP中session全面教程

    在HTTP协议中,每一次请求都是独立的,没有状态保持,因此我们需要通过某种机制来记录用户的会话状态,这就是Session的作用。 **1.2 Session的工作原理** - **创建与存储:**当用户首次访问网站时,服务器会创建一...

    Tomcat中实现Session小结

    在本文中,我们将深入探讨Tomcat服务器中实现Session的相关知识,这包括Session的基本概念、目的、实现机制以及通过示例进行的详细解析。 **什么是Session?** Session是Web开发中用来跟踪用户状态的一种机制。...

    获取SessionID

    本文将围绕如何获取SessionID展开讨论,并通过示例代码深入解析其工作原理。 #### 一、Session简介 1. **概念**:Session是服务器端技术,它通过在服务器上保存用户的信息来识别不同的用户会话。 2. **作用**:...

    osip2协议栈原理分析以及总结

    【osip2协议栈原理分析以及总结】 osip2是一个基于C语言编写的开源SIP(Session Initiation Protocol)协议栈,广泛应用于如linphone这样的VoIP项目中。它的主要特点是小巧精悍,专注于SIP协议的数据解析和事务管理...

    oracle kill session

    ### Oracle Kill Session:详解与实践 ...通过本篇文章的学习,相信读者已经掌握了kill session的基本原理、应用场景以及实际操作方法。在日常工作中,合理利用这一技术手段能够有效提升数据库系统的稳定性和可用性。

    基于ZooKeeper的分布式Session实现

    本文将深入探讨如何利用ZooKeeper实现分布式Session,并通过分析提供的"基于ZooKeeper的分布式Session实现.doc"文档,解析其实现原理与步骤。 首先,理解ZooKeeper的基本概念至关重要。ZooKeeper是一个高可用、高...

    webgoat——Session Management Flaws会话管理缺陷

    综上所述,会话管理是Web应用程序安全的重要组成部分,包括正确生成和保护Session ID,以及处理认证Cookie。理解这些概念和潜在风险对于开发安全的Web应用程序至关重要。同时,通过WebGoat这样的教学平台,可以实际...

    java中使用session购物车的简单例子

    在Java Web开发中,Session是HTTP协议中一种用于在客户端和服务器之间保持状态的重要机制。在本例中,“java中使用session购物车的简单例子”是通过Servlet技术实现的一个应用场景,旨在帮助开发者理解如何利用...

    关于Session和Cookie的一个PPT

    Session和Cookie是Web开发中的关键概念,用于在用户与服务器之间保持状态。 **描述分析:** 描述中提到的"博文链接:https://shmilywzc.iteye.com/blog/1191743" 提供了一个外部资源,可能是对PPT内容的补充或扩展...

    httpSession

    3. **session共享与复制**:在集群环境中,如何实现session的共享,以确保用户在不同服务器之间切换时仍能保持会话状态。这可能涉及到session复制或使用外部存储(如数据库或内存缓存)。 4. **session的优化**:...

    sip会话模拟测试例子

    SIP(Session Initiation Protocol)是一种用于控制多媒体通信会话(如语音和视频通话)的信令协议。在IT行业中,SIP广泛应用于VoIP(Voice over Internet Protocol)系统,为互联网电话通信提供了基础。本篇文章将...

    实验1 万维网运行原理分析1

    【万维网运行原理分析】 万维网,简称WWW,是一种基于超文本和互联网技术的信息共享和交流平台。其运行原理主要涉及客户端浏览器与服务器之间的交互,主要通过HTTP(超文本传输协议)进行通信。 1. **HTTP协议**:...

    rtp.rar_rtp_rtp session_rtp报文解析_rtp模块_丢包

    例如,可能涉及如何解析RTP报文、实现session管理、以及丢包检测与恢复策略的代码示例。 总之,RTP协议是实时通信的核心,其报文解析和session管理是确保数据正确传输的关键。在面对网络丢包挑战时,需要利用各种...

    Session,ViewState用法

    在Web应用程序开发中,Session是一种服务器端技术,用于存储用户的会话状态。当用户访问一个网站时,服务器为该用户创建一个唯一的Session标识(通常是一个随机生成的字符串),并将其保存在客户端的Cookie中或通过...

Global site tag (gtag.js) - Google Analytics