http session 基础知识

因为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,也就用不了他们服务,产品,像新浪,搜狐这样的大公司都这样。其实我们平时在公司做项目也从来不这样写,但那是因为我们不知道这个原理,至少我是到现在才知道的。

时间: 2024-10-05 05:02:05

http session 基础知识的相关文章

cookie 和 session 的基础知识

cookie 和session 的区别详解 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie

Servlet——Session(1)之基础知识

Session之基础知识 思考两个问题: 1. 大家在网上买东西,张三和李四他们购买的商品不一样,他们的购物车中显示的商品也不一样,这是怎么实现的? 2. 不同的用户登录网站后,不管该用户浏览该网站的哪个页面,都可以显示登录人的名字,同样可以随时去查看自己的购物车中的商品,这是怎么实现的? Session技术 Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时

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

本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息:比如用户信息.聊天历史记录.好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送. 作为IM系统中不可或缺的技术,Http短连的重要性无可替代,但Http作为传统互联网信

JSP SERVLET 基础知识

jsp(java server page)和servlet是JAVA EE规范的两个基本成员,是JAVA WEB开发的重点也是基础知识.JSP本质上也需要编译成SERVLET运行. JSP比较简单,可以理解为在HTML页面中嵌入JAVA代码,或使用各种JSP标签,再辅以各种JAVA BEAN. <!-- JSP声明 --> <%! public String info(){return "Hello jsp";} %> <div> <!-- J

java项目使用memcache实现session共享+session基础

本文章主要目的是配置session共享,为了巩固基础,捎带介绍了一些基础知识(网上搜索后觉得最全面的特引过来,节省时间),基础扎实的可以自动忽略. 基础篇: 1.了解java web中的session与cookie. 2.如何封装request和session这两个web项目中最常用的对象(以解决乱码为例) 进阶篇: 3.利用memcache实现session共享 在开发过程中,为了缓解访问压力,往往需要配置负载均衡,也就是相同的项目放在多台机子上,保证一台机子挂了,网站仍然可以正常访问,除了需

【转载:Oracle基础知识】Oracle数据库体系结构

先来看张直观的图:                                            oracle 11g 体系结构图 理解Oracle体系结构要充分理解三个概念:数据库(database),数据库实例(instance),会话(session),一定不要把这三个概念弄混. 数据库的概念 (A)    物理存储结构由数据文件.控制文件.重做日志文件组成: 1.       数据文件(datafile) select * from dba_data_files; 数据文件包括存

网络基础知识查询

第一章.基础网络概念 1.1 网络是个什么玩意儿 全世界的人种有很多,人类使用的语言种类也多的很.那如果你想要跟外国人沟通时,除了比手划脚之外,你要如何跟对方讲话? 大概只有两种方式啰,一种是强迫他学中文,一种则是我们学他的语言,这样才能沟通啊.在目前世界上的强势语言还是属于英语系国家, 所以啰,不管是啥人种,只要学好英文,那么大家都讲英文,彼此就能够沟通了.希望不久的未来,咱们的中文能够成为强势语言啊! 这个观念延伸到网络上面也是行的通的,全世界的操作系统多的很,不是只有 Windows/Li

PHP基础入门(四)---PHP数组实用基础知识

PHP数组 数组是特殊的变量,它可以同时保存一个以上的值. ***关键词:数组基础.数组遍历.超全局数组.数组功能.数组函数. 下面来和大家分享一下有关PHP的数组基础知识,希望对你PHP的学习有所帮助~ 一.PHP数组基础部分 一PHP数组的分类 按照下标的不同,PHP数组分为关联数组和索引数组:索引数组:下标从0开始,依次增长关联数组:下标为字符串格式,每个下标字符串与数组的值一一关联对应(类似对象的键值对) 代码演示: 1 $arr1 = array(1,2,3,4,5,6,7);//索引

1.1课程安排和网站基础知识

/本节视频和图例请看百度云:http://pan.baidu.com/s/1o7bg5a6/ WAMP独立安装 1课程介绍+网站基础知识(HTML+网站+访问流程) 2PHP介绍+web介绍+环境介绍 3Apache安装+配置修改+命令使用 4Apache工作原理+安装PHP+Apache加载PHP 5安装mysql 6php加载mysql+虚拟主机 课程安排 7天:PHP基础知识介绍+服务器搭建 5+1天:5天介绍SQL,1天PHP+mysql编程 12天:PHP深入(面向对象,项目,MVC,