JavaWeb学习:session

关于Session:

JavaWeb学习:session_第1张图片

图1

session的话,是将数据保存在服务端的,是服务端的会话跟踪技术。关于session的原理,其实session是基于cookies实现的。

假设服务端写了两个servlet,一个是servlet_a,一个是servlet_b。

此时在servlet_a中创建一个session对象,并对session对象赋值;然后在servlet_b中可以通过getAttribute的方法获取到servlet_a中的数据。

这就是session传输数据的基本过程,但是怎么保证servlet_a与servlet_b调用的是同一个session呢?

此处就用到了cookies,当servlet_a创建完session之后,会在给客户端响应的时候返回一个set-cookie的值,当下一次客户端发送请求到servlet_b的时候,会同时发生这个session的cookie值。从而保证servlet_a与servlet_b访问的是同一个session。这也是为什么说session是基于cookie的。

JavaWeb学习:session_第2张图片

图2

session主要工作流程前面已经简单叙述过了,现在让我们来看一看具体的代码实现。主要用的方法如图2所示,具体代码如下图。

JavaWeb学习:session_第3张图片

图3

这是创建的servlet demo1,具体在demo1中实现session的获取与数据的储存,其中需要注意的是,在给session里面储存数据时,使用的是键值对的数据类型,但value部分的数据类型不止是字符串类型,可以是任何类型,当我们查看此方法的源代码时(如图4)可以看到,value部分的数据类型是object。

图4

JavaWeb学习:session_第4张图片 

图5

在图3中我们创建好了session对象,这时我们在servlet-demo2中访问该数据,从而达到两个servlet之间数据的交流。可以将数据打印出来查看是否是同一个seesion的值。

JavaWeb学习:session_第5张图片 

图6

session的使用细节

session钝化与活化:

正常关闭重启:(下述内容为正常实验观察钝化与活化的过程)

首先重启tomcat:

在tomcat中用ctrl_c停止,依此输入(windows下)

cd ..

cd cookie-demo

mvn tomcat7:run(注意这里是用的你自己配置的tomcat的版本)

再访问用来创建session对象的servlet

再结束tomcat服务

ctrl c(等待一会儿)

出现提示,选择“Y”,终止操作。

再次启动服务器

tomcat命令行输入“mvn tomcat7:run(注意这里是用的你自己配置的tomcat的版本)”

然后直接访问使用demo1中session的demo2,并输出session值来观察session是否变化。

注意:不用再次访问demo1.

结果可以看见session值还在。

————————————————————————————

这是因为在正常关闭之下,tomcat会执行tomcat的钝化与活化(如图6)并且再次活化时,存入文件的session值会在加载之后自动删除。

即!正常重启,session是不会丢失的(但还是有时间限制)

—————————————————————————————

还有一种情况:

demo1创建session1,然后关闭浏览器,再打开浏览器,demo2获取session2,此时的sessio1与session2就不是一样的了。因为关闭浏览器后,再次产生的会话就不是同一个会话了,因此cookie值代表的ID也就不一样了。

因此,若是需要共享session,通过session传递数据,那在需要的期间,浏览器都不能关闭。

即session是不能长期地储存数据的。

question:那直接关闭浏览器就不算是正常关闭了吗?

session的销毁:

两种销毁方式,如图6所示。

  • 默认的自动销毁时间是30分钟,可以到web.xml文件中自行定义从而改变默认值。
  • session自己调用invalidate()方法就自己把自己销毁了,里面的数据就没有了。

JavaWeb学习:session_第6张图片 

图7

关于session与cookie的区别 :

有如图7所示的5点。

关于安全性:因为cookie是将数据存储在客户端的,在发请求的时候会多次在客户端与服务端之间进行传递,然而传递就会容易被半路截住,而session就一直呆在服务端里,在家里总是比出门要安全的多的。

所以,根据他俩的区别,一般我们在运用的时候

购物车数据:C

账户信息:S

登录账号密码输入:C(确实需要安全性,但是session不能长时间记住嘛,那就给cooki里的数据加密吧)

验证码:S

你可能感兴趣的:(学习,java-ee)