`
llyzq
  • 浏览: 583598 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

session原理

    博客分类:
  • J2EE
 
阅读更多
转http://blog.csdn.net/wangzhkai/article/details/4187496

session原理
分类: asp.net 开发 2009-05-15 09:22 3095人阅读 评论(3) 收藏 举报
不得不说当我了解了session的原理之后感觉到了惊讶,因为session竟然是基于cookie的,所以当一向被认为不安全的cookie和超安全的session等同之后确实很让人接受不了,因为我确实是菜鸟
做了这么多年的web,用了这么多年的session和cookie,竟然就习惯了这两个东西,把他们的功能当成了天然的功能,从来没有考虑过他们的原理,实在是悲哀,直到有一天,我觉醒了。。
首先应该了解http协议的请求过程,这个以前倒是知道,当然是基于tcp/ip协议,客户端请求服务器,服务器回答客户端,无状态的,那么服务器如何区分客户端的呢?看完本文自然明白了

关于cookie

先来说cookie,怎么使用就不说了,cookie按照在客户端存放的方式,可以分为两类,
一种是会话性质的cookie,存放在浏览器内存中,当你在用代码向客户端写入cookie的时候,如果没有指定过期时间,那么cookie是存放在浏览器的内存里面的,不会持久化在硬盘上,也就是你在浏览器的临时文件里找不到!
一种是持久化的cookie,存放在硬盘上,当你指定了cookie的过期时间,那么,在客户端写入cookie的时候就会在浏览器的临时文件下生成一个文件,具体格式和名字可以到浏览器临时文件去看下

cookie的原理是这样的:当你在服务器端的代码里写了response.cookie["mycookie"]="mytestcookie"的时候,返回给客户端的http响应中,会在http相应头中加入cookie的信息,浏览器收到相应后,会按照http响应头里的cookie在客户端建立cookie。
客户端的cookie也是插在http头中发送到服务器端的,并且,一个域,在客户端建立的所有cookie,在客户端的每一次的http请求都会带着,比如testwebsite.com这个站点,任何时刻写到客户端的cookie,只要不过期,浏览器在向testwebsite.com发送http请求的时候,会带上这些cookie,所以cookie在客户端的大小是有限制的

关于session
cookie明白了之后session就容易理解了,asp的session和asp.net默认的session就是通过第一种cookie来实现的,你可以把自己的浏览器的cookie彻底禁用,然后再去登录一些注册过的门户网站,会发现很多都登录不了了。是cookie,将http的请求变得有状态。session的实现是web服务器的事情,不过很显然是利用会话cookie,也就是存放在浏览器内存里的那种cookie来实现的,在cookie里只是存放了SessionID,然后在服务器上建立了一张表,对应客户端的SessionID。这张表是存放在服务器上的进程中的,也就是服务器的内存里,也就是Application里。当客户端请求服务器的时候,如果服务器发现这是一个新的请求,就会分配给他一个SessionID,也就是在浏览器写入一个sessionID的cookie。你可以试一下,在你请求过一次服务器之后,在服务器遍历客户端所有的cookie,就会发现这个叫做SessionID的cookie。
所以在了解了这个session的原理之后我们可以自己来造一个自己的session,过程就不说了。

那么我们现在可以说session就是依赖于会话性的cookie的

关于session的其他
asp.net可以定制session的实现方式,默认是上面说的原理,但是可以改变的。
可以选择不依赖于cookie,就是把sessionID作为URL的一部分放在每一次的请求后面,像这样:
http://www.testwebsite.com/(-此处为一串sessionID的字符串-)/test.aspx
但是这种方式你如果在html中指定url的时候,指定了绝对路径,比如
<a href="http://www.testwebsite.com/other.aspx">test</a>
那么点击这个链接就会不是同一个会话了,因为此时区分客户端的唯一标志就是域名后面那串字符串
php也有类似的做法,不依赖cookie的做法是在get的参数里面带一个sessionID的参数
asp.net还可以定义session里存放数据的存储位置,放在其他进程,放在sqlServer中等等,知道了session的原理就很容易明白,我们可以自己就可以造一个类似session作用的东西的

session的结束问题

还有知道了session的原理就会明白一个session会话如何结束,除非服务器端可以清除一个session会话,客户端是没有能力清除session的,关闭浏览器的时候并不能够结束当前的会话(忽略浏览器关闭事件),在不依赖于cookie的session中最明显,你可以记下你的sessionID那串字符串,关闭浏览器,打开,把sessionID自己替换,你就可以恢复刚才的会话了。所谓的20分钟session超时,是服务器每隔20分钟对于不活动的session清除而已。
还有要指出的是依赖于cookie的session是存放在浏览器内存中的,所以一个浏览器的进程就会产生一个session,可以通过任务管理器查看进程,对于IE来说,只有双击桌面上的浏览器快捷方式才能新启动一个进程的,当然其他类似启动iexplorer.exe的行为也可以

到这里你会发现在依赖于cookie的session中,是需要浏览器的支持的!所以当你不用浏览器而自己来制造http请求的时候,session就用了!
对于js的ajax请求,确切的说是xmlhttp这个组件发送的http请求,虽然是你使用js的代码自己制造的,但是依然是借助于浏览器发送的,所以可以获得session。
所以在webservice中使用session我们还得自己造一个东西实现cookie的功能
分享到:
评论

相关推荐

    理解HTTP session原理及应用

    本文将深入探讨HTTP Session的原理及其在实际应用中的作用。 首先,理解"session"一词的含义至关重要。在一般语境中,session指的是有始有终的一系列动作或消息,例如打电话的过程。而在Web开发中,session则被赋予...

    深入理解ServletJSP之“Cookie和Session原理”很详细

    ### 深入理解Servlet/JSP之“Cookie和Session原理” #### 一、Cookie Cookie是一种常用的技术,用于实现Web应用程序中的用户会话管理。它允许服务器存储一些数据(通常是小文本文件)在用户的计算机上,以便后续...

    计算机后端-PHP视频教程. php之blog实战45-session原理.wmv

    计算机后端-PHP视频教程. php之blog实战45-session原理.wmv

    ASP.NET中Session实现原理浅析

    为了解决这个问题,Session应运而生,它允许服务器端保存并识别不同客户端的会话数据。 在ASP.NET中,Session的实现主要依赖于以下几个核心组件: 1. **HttpSessionState**:这是ASP.NET中用于管理会话状态的对象...

    Servlet Session机制详解

    Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码

    关于session与cookie的原理简述

    **Session原理** Session是另一种用户状态管理方式,它将用户数据存储在服务器端,通常以文件或数据库的形式。每个用户会有一个唯一的Session ID,这个ID通过Cookie或URL参数传递给服务器。 1. **启动Session** -...

    PHP的cookie与session原理及用法详解

    本文将深入探讨这两种技术的原理、用法以及PHP中操作它们的方法。 首先,理解cookie的产生背景。由于HTTP协议是无状态的,服务器无法记住两次请求之间的关联,为了解决这个问题,cookie应运而生。cookie存储在...

    yxdYXD11123123#Frontend-Road#session原理+express-session用法1

    工作流程当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie

    Nodejs 和Session 原理及实战技巧小结

    Node.js是一种基于Chrome V8引擎的JavaScript运行...以上展示了如何在Node.js环境下使用Session进行用户会话管理的原理和实战技巧。这些知识可以帮助开发者更好地理解和运用Node.js处理Web应用中的用户认证与状态保持。

    Tomcat7基于Redis的Session共享

    原理就是继承tomcat的manager接口,接管session的持久化工作 2.使用 ◦使用的时候就是Maven打包,放到tomcat的lib里面 (主要是三个包:commons-pool2-2.3.jar;jedis-2.7.3.jar;tomcat7-redis-cluster-1.0.0.jar) ...

    tomcat-redis-session

    使用tomcat-redis-session-manager开源框架实现使用Redis存储Nginx+Tomcat负载均衡集群的Session所需要的3个jar:tomcat-redis-session-1.0-SNAPSHOT.jar、jedis-2.7.2.jar、commons-pool2-2.0.jar

    跨域共享session (实现http跳转https 共享session)

    **一、跨域共享session原理** 1. **JSONP(JSON with Padding)**:JSONP是一种早期的跨域解决方案,但不适用于需要服务器端存储session的情况,因为它只能用于获取数据,无法设置Cookie。 2. **CORS(Cross-Origin ...

    详解SpringBoot中Session超时原理说明

    SpringBoot 中 Session 超时原理说明 在 SpringBoot 中,Session 超时是指在一定时间内没有任何操作,Session 就会超时失效,导致用户需要重新登录才可以继续访问页面。这是因为 Session 的超时时间是有限制的,...

    Laravel开发-session-tokens

    1. **Session原理**:Laravel使用存储驱动(如文件、数据库、Redis等)来存储用户会话数据。当用户访问应用时,服务器会给浏览器分配一个唯一的Session ID,这个ID通常以Cookie的形式存在用户的设备上。每次请求时,...

    解析php中session的实现原理以及大网站应用应注意的问题

    总的来说,理解PHP Session的工作原理以及如何优化其性能对于开发高效且可靠的Web应用至关重要。开发者应根据网站的规模、流量和资源状况,选择合适的Session管理策略,以确保用户体验的连贯性和系统的可扩展性。

    tomcat+redis共享session所需jar包

    **二、Tomcat与Redis共享Session原理** Tomcat通过一个名为`tomcat-redis-session-manager`的组件,将原本在内存中存储的Session数据转换为序列化对象并存储到Redis中。每当有Session操作(如创建、更新、删除)时,...

Global site tag (gtag.js) - Google Analytics