一篇文章让你明白什么是Java中的会话机制!
会话就是客户端和服务器之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。专业角度上讲,会话较多用于网络上,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。用平述的语言可以解释为:你拔打你女友的电话号码,你女友接听,然后一翻“亲爱的”,直到任何一方挂掉电话,这个过程就是一个会话。你挑逗一只小狗,它跟你互动,也是会话;它不鸟你,那就不形成会话。
一般现在通常在开发中,常用的会话有两种,Cookie和Session,
-
Cookie:是指在服务器和客户端之间的响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了这个Cookie,在之后的请求和相应的过程中,会将此Cookie来回传递,这样就可以通过Cookie这个载体完成客户端和服务端的数据交互。
-
从发展进程来看,很久很久以前,为了完成HTTP会话,那些互联网的设计者们想到了一个办法,就是在浏览器中存储用户信息,每次请求都向服务端发送这些信息,这样服务端就知道请求发送者是谁了,就知道应该返回什么信息给客户了。但是问题很快就出现了,如果浏览器存储了这些信息,那么有的人就可以通过修改这些信息来达到一些非法的目的。为了安全起见,互联网老大哥们又想到了一招识别用户身份的办法,就是把客户信息存储在服务端(session),一切用户的身份由服务器指定。直到目前,session已成功HTTP会话的主流,应该说是绝对控制的地位。这也是为何很多人会称Cookie和Session的区别就是一个存储在客户端一个存储的服务器的原因。
-
Cookie一直保存在浏览器中,当客户端每一次发送请求到服务器的时候,客户端就会发送一次Cookie到服务器中。所以在传输Cookie的时候,使用的应该是response。
-
Cookie常用的方法和操作:
-
创建Cookie:
Cookie cookie = new Cookie("name", "zhangsan"); response.addCookie(cookie); // cookie传输是通过键值对的方式来传输的
-
读取Cookie
Cookie[] cookies = request.getCookies(); for(Cookie cookie:cookies){ out.write(cookie.getName()+cookie.getValue())// 伪代码 }
-
void setMaxAge(int age) 设置Cookie的有效时间,单位秒
-
int getMaxAge() 获取Cookie的有效时间
-
String getName() 获取Cookie存储的name
-
String getValue() 获取Cookie存储的Value
-
-
-
Session:
- 指代用户会话,服务器无法试别每一次得Http请求的出处(不知道来自于那个终端),他只会接受到一个请求信号,所以就有一个问题,将用户得响应发送给其他人,不许有一种技术来让服务器知道请求来自哪里,这就是会话技术。
- 会话就是客户端和服务器之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。
- 会话状态,指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。
- 属于同一次会话的请求都有一个相同的标识符,sessionUd
- session常用方法:
- String getID() 获取SessionID
- void setMaxInactiveInterval(int interval) 设置session的失效时间,单位为秒
- int getMaxInactiveInterval() 获取当前session的失效时间
- void invalidate() 设置session立即失效
- void setAttribute(String key, Object value) 通过键值对的形式来存储数据
- Object getAttribute(String key) 通过健来获取对应的数据
- void removeAttribute(String key) 通过健来删除对应的数据
Cookie和Session的区别
- Session:
- 保存在服务器中,存储重要信息,保存的数据类型为Object类型,随着会话的结束而销毁
- Cookie
- 保存在本地浏览器文件中,存储不重要信息,保存数据类型为String文本文件,可以长期存储在浏览器中,与会话无关。