因为Http的无接连,无状态,所以造就了Cookie,Session的诞生。

  Session也是类似Cookie一样的功能,用于记录客户端浏览器与服务器端交互的会话状态。它与Cookie的重要区别是:
  1.Cookie是记录在客户端浏览器本地;(它是不可靠的,客户端浏览器可以不允许服务器记录,还可以删除。)
  2.Session是记录在服务器端的

  那么Session是如何记录的?
  当用浏览器访问服务器的一个请求时,如果要用到Session,服务器会为浏览器窗口开辟一块独一无二的session内存,当其它浏览器窗口再次访问服务器也想用Session时,服务器会为新的浏览器或窗口开辟一块的新的内存。


 
   那有个问题,比如当我第一个页面登陆以后,跳到第二个页面,服务器怎么就知道我是哪个浏览器,怎么知道我属于哪块Session内存呢?而是非常准确地定位到我第一次登陆时创建的那个Sesion,不是其它Session呢?其实这里有一个常用的方法解决这个问题,那就是标记——浏览器第一次来创建Session时,服务器创建一个独一无二的号码标记,标识这个浏览器窗口和这块Session内存是一对一的关系,并将这个标识存储在浏览器窗口中,同时也存储在对应的Session中,当浏览器窗口下次再来的时候把这个标识带过来,服务器就知道根据那个标识去定位Sesssion块了,这个标识就是sessionId,每个浏览器窗口都有一个独一无二的编号SessionId。

  那么就有个问题,SessionId存储在什么地方?假设Session已经存在,当浏览器访问过来,它应该要把SessionId带过来,因为只有这样,服务器才知道根据这个SessionId去定位内存中的哪个Session。所以这样一来,就有了两种创建Session的方式:
  1.通过Cookie,将SessionId存储在Cookie中
  2.通过URL重写,将SessionId作为参数传递

   先说第一种,存储在Cookie中有两种方法,即浏览器内存和本地文件。哪种存法比较好呢,显然是内存中,因为服务器端Session内存与浏览器窗口一一对应,浏览器窗口存在,SessionId就存在,浏览器窗口关闭了,SessionId留着就没意义了,新开一个浏览器窗口,SessionId就变了。因此通过Cookie创建Session是将SessionId存储在浏览器内存的Cookie中。这样浏览器每次访问服务器,服务器就可以取到SessionId了。

  那浏览器可以禁止服务器写入Cookie,当浏览器Cookie被禁止了以后,服务器根本无法写入SessionId,那Session就创建不了,也就用不了啦。所以就有了第二种方法:URL重写。
  第二种方法URL重写实现Session:
  response.encodeURL(String url);
  这个方法有两个作用:
  1.转码,当有中文时可以用它来编码,防止乱码。
  2.给URL后面加上SessionId

  测试时,我们可以将浏览器Cookie关闭,并将跳转到Session的URL地址用encodeURL()包起来。这时再访问就会发现,地址栏请求的URL后跟有参数jessionid。


 
  其实这种方式并不常用,如果要将一个网站的每个要访问Session的URL都这样包起来挺费劲的。只有少数大公司,写代码比较规范,严谨的公司才这么干,大部分公司都不会这么写,因为他们认为,你就应该开启Cookie,如果不开,那么你就用了Session,也就用不了他们服务,产品,像新浪,搜狐这样的大公司都这样。其实我们平时在公司做项目也从来不这样写,但那是因为我们不知道这个原理,至少我是到现在才知道的。

http session 基础知识的更多相关文章

  1. Session基础知识

    Session基础知识 主题 概念  Session的创建 Session的存储机制 Session的失效 参考资料   概念        Session代表一次用户会话.一次用户会话的含义是:从客 ...

  2. cookie和session基础知识学习

    一.session的简单使用 session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象.session的使用步骤: 获取session对象使用session ...

  3. cookie 和 session 的基础知识

    cookie 和 session 的基础知识 cookie 和session 的区别详解 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会 ...

  4. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  5. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  6. Python黑帽编程3.0 第三章 网络接口层攻击基础知识

    3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...

  7. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  8. JVM 基础知识

    JVM 基础知识(GC) 2013-12-10 00:16 3190人阅读 评论(1) 收藏 举报 分类: Java(49) 目录(?)[+] 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看 ...

  9. android图形基础知识

    Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...

随机推荐

  1. Air Raid[HDU1151]

    Air RaidTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. BZOJ3764 : Petya的序列

    首先如果一段连续子序列里没有任何幸运数,那么显然可以缩成一个点. 设幸运数个数为$m$,那么现在序列长度是$O(m)$的,考虑暴力枚举$R_1$,然后从右往左枚举$L_1$. 每次碰到一个幸运数,就将 ...

  3. js 四舍五入保留二位小数

    1. 最笨的办法....... [我就怎么干的.........] function get() { var s = 22.127456 + ""; var str = s.sub ...

  4. 使用linux命令行配置无线网链接

    1. 需安装wpa_supplicant https://wiki.archlinux.org/index.php/WPA_Supplicant_%28%E7%AE%80%E4%BD%93%E4%B8 ...

  5. Extjs 属性控件[转载]

    Ext.form.TimeField: 配置项:            maxValue:列表中允许的最大时间            maxText:当时间大于最大值时的错误提示信息          ...

  6. JavaScript_JS判断客户端是否是iOS或者Android

    通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端.代码如下: <script type="text/javascript"> var ...

  7. winform窗体最大化、最小化、还原

    //最大化 private void button_maxsize_Click(object sender, EventArgs e)        {            this.WindowS ...

  8. Hadoop.2.x_无秘钥设置

    1.在实际生产环境中为Hadoop配置无秘钥登录非常有必要 # 在没有配置时: [liuwl@linux-66-64 hadoop-2.5.0]$ jps 26163 Jps [liuwl@linux ...

  9. python 数据类型基础

    Python3 运算符 什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 1.算术运 ...

  10. php中提示Undefined index的解决方法

    我们经常接收表单POST过来的数据时报Undefined index错误,如下: $act=$_POST['action']; 用以上代码总是提示 Notice: Undefined index: a ...