`
l4432848
  • 浏览: 243518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Session简介

    博客分类:
  • java
 
阅读更多

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

Session简介

Session 在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
实际上Session 和cookie是类似的一种维持客户端和服务会话状态的技术,不过Session 安全性要比cookie高,这是因为Session 的数据是存放在服务端上的,所以相对的也会增加服务器的压力,所以Session 被应用于储存一些比较隐私的数据,例如用户名密码和用户的资料等。

Session与Cookie的区别

cookie与session最大的区别就是一个是将数据存放在客户端,一个是将数据存放在服务端。cookie是将信息都存放在客户端的浏览器内存或磁盘中,所以不是很安全,别人可以分析存放在本地的cookie数据来进行用户信息的dàoqiè或进行cookie欺骗。
所以在安全性上session要好一些,session通信的一般实现形式是通过cookie来实现,与cookie不同的是,session只会保存一个sessionID在客户端,不会像cookie那样将具体的数据保存在客户端,session具体的数据只会保存在服务端上,在Servlet中session数据是被封装在一个对象里,而这个对象会被保存在对象池中,客户端发生请求时会带上它的sessionID,服务端就会根据这个sessionID,来从对象池中获得相应的session对象,从对象中获得session的具体数据,服务端通过这个session数据来保持或改变与客户端会话的状态。

Session机制

以上也介绍了Session有两个主要的东西,一个是SessionID,一个是存放在服务端对象池中的Session对象。客户端访问服务端的时候,会先判断这个客户端的请求数据中是否包含有SessionID,如果没有的话,就会认为这个客户端是第一次进行访问。因为是第一次访问,所以服务端会给客户端在对象池中创建一个Session对象(假设这个会话是需要维持的),并生成出这个对象的SessionID,接着会通过cookie将SessionID响应给客户端,同时会把Session对象放回对象池里。客户端接收响应数据后会将SessionID存放在本地,下一次再访问服务端的时候就会把SessionID给带上,服务端就能够通过SessionID获得相应的Session对象,Session就是以这样的一个机制维持会话状态的。
示意图:

image

如何获得Session对象

在代码中,通过request中的getSession方法来获得Session对象,这个方法可以传递一个布尔类型的参数,如果不传递的话默认为true。
参数值为true时,会先问客户端有没有传递 SessionID过来,如果没有就会重新创建一个session对象。如果有SessionID,就去池里抓取session对象,对象池里反馈没有session对象的话,也会重新创建session对象。
代码示例:

image

在浏览器可以看到生成的SessionID保存在Cookies中:

image

Java代码生成的Session标识一般都是JSESSIONID,这个JSESSIONID的值是唯一的。

参数值为false时,如果客户端有SessionID就直接从池里抓session对象,没有抓到就返回null,没有SessionID也同样返回null。
代码示例:

image

我把浏览器关闭了再打开SessionID就会被清空,这时候再访问就不会创建session对象了:

image

可以看到Cookies中并没有SessionID,这就是true和false参数的作用。

image

思维导图:

image

Session超时配置和名称配置(web.xml中配置)

通过web.xml可以设置session的过期时间,当session到了过期时间后,就会被销毁。并且session在浏览器cookies里的名称也可以在web.xml中自定义,配置语法如下:

image

运行结果:

image

HttpSession接口中的方法

Session对象是HttpSession接口类型的,所以可以调用HttpSession中的方法,其中有以下几个主要的方法:
getAttribute(String) 得到键的值
getAttributeNames() 得到里面存储的键(key)
removeAttribute(String) 按key删除数据
setAttribute(String, Object) 存储键和值,如果已经存在值则会覆盖值
invalidate() 销毁session对象
isNew() 判断是否是新创建的session对象
getCreationTime() 得到session对象的创建时间,返回的是长整型格式的时间
getId() 得到sessionID
getLastAccessedTime() 得到session的最后的访问时间

代码示例:

image

运行结果:

image

如何关闭Tomcat后在磁盘中寄存Session

正常关闭tomcat ,它会把session中的数据存储到磁盘上,下次启动tomcat的时候会还原数据:
代码:

image

访问之后就正常关闭Tomcat,session数据会保存在磁盘中,下一次启动的时候就会读取出来:

image

这个保存路径在控制台打印的日志信息中寻找。

如果你session数据中保存的是一个自定义对象,那么需要给这个对象实现序列化接口才可以进行保存,不然的话是无法写入到磁盘中的:

image

序列化就是将对象的状态信息转换为可以存储或传输的形式的过程,也就是说对象数据需要进行序列化才能存储到磁盘中,不然是无法存储的。
将对象保存到session数据中:

image

这样才能将包含对象数据的session正常保存到磁盘中。

登录例题

使用以上的知识点做一个登录的小例题,让客户端能通过session保持登录状态,为了简单化就不涉及连接数据库了:
Html代码:

image

处理登录业务的Servlet代码:

image

登录成功的Servlet代码:

image

退出登录的Servlet代码:

image

运行结果:

image

image

一般只有需要存储session的页面才使用getSession()方法来创建session对象,其他的页面都是调用getSession(flase)方法。

0
0
分享到:
评论
1 楼 枫叶清五 2017-11-23  
 

相关推荐

    session简介.doc

    session简介.doc

    PHP100视频教程 32:PHP5中Cookie与 Session详解

    1、Cookie和Session简介与区别Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪Cookie是完全保持在客户端的如:IE firefox...

    spring-session简介及实现原理源码分析

    主要介绍了spring-session简介及实现原理源码分析,具有一定参考价值,需要的朋友可以了解下。

    servlet之session简介_动力节点Java学院整理

    主要介绍了servlet之session简介,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    spring session介绍和源代码分享.pptx

    分布式session简介和 spring session 源码 解析 适合想了解分布式 session的基础知识,想从源码层面了解spring session的同学

    PHP100视频教程 (三十二、PHP5中Cookie与 Session详解)

    1、Cookie和Session简介与区别 Session信息是存放在server端,但session id是存放在client cookie的,当然php 的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪 Cookie是完全保持在客户端的如:IE fire...

    PHP100视频教程 32:PHP5中Cookie与 Session详解.rar

    软件介绍 1、Cookie和Session简介与区别 Session信息是存放在server端,但session id是存放在client cookie的,当然php 的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪 Cookie是完全保持在客户端...

    servlet中session简介和使用例子

    在servlet中,session是封装在javax.servlet.http.HttpSession这个接口中的,这个接口是构建在cookie或者URL重写的基础上,要得到一个HttpSession的实例,就可以通过HttpServletRequest的getSession()方法来获得

    asp.net中session的原理及应用详解

    Session简介丶特性 ——————————————————————————– 1.Session是一种Web会话中的常用状态之一。 2.Session提供了一种把信息保存在服务器内存中的方式。他能储存任何数据类型,包含自定义...

    session 加入redis的实现代码

    Session简介 session,中文经常翻译为会话,其本来的含义是 指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在 一个...

    PHP5中Cookie与 Session使用详解

    1、Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 Session来跟踪和判断。 ...

    session配置secure和httpOnly

    本文档描述了关于cookie的http-only和secure的简介,和如何设置该属性,以及设置该属性会遇到的问题解决方法

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘

    4.5.1 Session简介 79 4.5.2 Session对象应用 80 4.6 Application对象 82 4.7 Execption对象 83 4.8 Config参数配置对象 84 4.9 Cookie对象 85 4.10 扩展练习 88 第5章 JSP访问文件 91 5.1 File类 91 5.1.1 File类...

    计算机\教程\asp.net和C#\原版教程\Session模型简介.pdf

    计算机\教程\asp.net和C#\原版教程\Session模型简介.pdf

    PHP Session机制简介及用法

    当服务器创建了一个session(session_start()),服务器将会在服务器的指定文件夹下创建一个session文件,其名称为sessionID,并当做cookie的值发送给浏览器。浏览器每次访问该服务器时便会带着这个cookie,服务器便...

    cookie-session-token:cookie、session、token简介

    cookie-session-tokencookie、session、token简介为了解决HTTP无状态,无法保存用户状态的问题产生了cookie和session1.服务端收到用户账号密码后,完成登录生成一个全局变量的session会话,作为所有鉴权脚本的通行证...

    yii操作session实例简介

    本文简述了Yii框架中使用session的方法,具体步骤如下: 一、与标准php代码的区别: 在Yii框架中,你不需要像标准PHP代码那样使用session_start(), 在Yii框架中,autoStart 属性缺省被设置为true,所以, 虽然没有...

    使用jquery操作session方法分享

    简介:  JquerySession是一个基于jquery的用来处理session的库,使用它可以简化我们的工作。在使用之前需要引入jquery。 语法: 添加数据  $.session.set(‘key’, ‘value’) 删除数据  $.session.remove(‘key...

Global site tag (gtag.js) - Google Analytics