会话
在Web应用程序中,服务器端和客户端之间交互使用的是Http协议,但是Http协议是一个无状态的协议,这里无状态的含义是每一个服务器和客户端之间的连接和它之前的连接之间是没有任何关系的,这是协议本身规定的。
可是,在web应用程序中,开发者希望同一个浏览器在连续的一段时间中对服务器的多次访问之间是相互关联的,而这连续的多次访问被称为是一个会话。
web应用程序中客户端浏览器与服务器之间一系列的请求响应动作
既然http协议规定相邻的两次请求之间是没有关联的,而web应用程序却希望多次请求之间有关联,这就不能用http协议本身来实现会话了,因此也就有了其他的实现会话的方法,这些方法就叫会话跟踪技术。
从原理上来分析,客户端和服务器之间的交互协议http不保存相邻两次请求之间的联系或者状态,那么要实现会话跟踪就要在客户端、服务器端、http协议三方面下工夫了。
-
cookie是客户端实现的会话跟踪技术。
是服务器向客户端写的一段文本信息,该信息可以修改,一般情况下存储一些非敏感信息。当客户端再次请求服务器时,会将Cookie以请求头的方式发送到服务器,这个时候服务器就能区分是谁在访问。
在服务器规定会话最长时间范围内有效,对浏览器串口和其子窗口。 -
session是服务器端(指的web服务器软件本身,而不是web应用程序)的会话跟踪技术。是在服务器端这边实现的会话跟踪技术。session是依赖cookie的。
session 是存放在服务器端的,更加安全。每一个用户都有一个不同的session,各个用户之间是不能共享的。
服务器端会创建一个session对象,并且产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端通过这个sessionID进行不同的用户识别。
Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效 。
session.setAttribute(String name,Object obj); //往session中存放内容(通过键和值的形式)
session.getAtrribute(String name); //通过键从session中获取内容
session.removeAttribute(String name); //把存储在session中的对象移除
session.invalidate();
-
url重写,是在http协议上实现的会话跟踪技术,是在cookie和session失效的情况下
客户端浏览器向服务器发出请求时,会在URL地址后面加上类似于“sessionID=*”形式的参数,服务器端通过获取sessionID关键字来获取会话值来判断是哪个用户发送的请求。
但是在程序第一次访问服务器端时,服务端并不能确认客户端浏览器是否支持Cookie。因此,当服务器第一次发出请求时,服务端会默认采用URL重写,也就是将SESSIONID写到URL地址中传递。
之后当客户端发送请求后,服务器会根据提交给客户端浏览器的信息自动检查客户端是否启用了Cookie,如果启用,将不再进行URL重写。如果没有,则继续使用URL重写。 -
隐藏表单域
web应用程序上实现的会话跟踪技术
通过进行信息的传递 。通过表单形式提交到服务器,但是本身不显示。
比如第二个表单中获取第一个表单中的内容,并以隐藏域( 文本框type为 hidden) 的方式接受第一个表单中的内容,再次传递到第三个表单中。通俗点说请求的顺序是这样的:表单一 - - > 表单二 - - >表单三,但是表单三需要用到表单一提交的内容,所以就会需要表单二作为过渡,把表单一的内容以隐藏域的形式保存,然后再传递到表单三中。