会话技术Session&Cookie

155 阅读3分钟

一、会话技术

1、会话:一次会话中包含多次请求和响应

2、一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方中断为止

3、功能:在一次会话的范围内的多次请求间,共享数据

4、方式:客户端会话技术Cookie、服务器端会话技术Session

二、Cookie

1、概念:客户端会话技术,将数据保存在客户端

2、使用

①创建Cookie对象,绑定数据

new Cookie(String name,String value)

②发送Cookie对象

response.addCookie(Cookie cookie)

③获取Cookie,拿到数据

Cookie[] request.getCookies()

3、实现原理

基于响应头set-cookie和请求头cookie实现

5、关于cookie的一些问题

①一次可不可以发送多个cookie?

答:可以,可以创建多个Cookie对象使用response多次调用addCookie方法,发送cookie即可。

②cookie在浏览器中保存多次时间?

答:默认,浏览器关闭,cookie数据销毁。 也可使用setMaxAge(int secends),正数情况,将Cookie数据写到硬盘文件中,
持久化存储,并制定cookie存活时间,到时间后,自动文件失效;负数情况,默认值;零,删除Cookie信息。

③Cookie可不可以存中文

答:tomcat8之前不可以直接存储中文数据,需要将中文数据转码-一般采用URL编码。之后,便支持中文数据,但特殊字符还是不支
持建议使用URL编码存储,URL编码解析。

④关于cookie共享
假设在一个tomcat服务器中部署多个web项目,那这些web项目中cookie可不可以共享呢?默认,不能共享。当然我们使用setPath
(String path):设置cookie获取范围,默认情况下,设置当前的虚拟目录,(要共享,设置path为'/')。

那么不同tomcat之间如何cookie共享呢?setDomain(String path):如果设置一级域名相同则,则可以实现。例如:tieba.baid
u.com和news.baidu.com,利用setDomain(".bai.com")实现。

6、cookie的特点和作用

特点:

①cookie存储数据在客户端浏览器

②浏览器对于单个cookie的大小限制4kB以及同一个域名下的总cookie数量也有限制20个

作用:

①cookie一般用于存出少量的不太敏感的数据

②再不登录的情况下,完成服务器端对客户端的身份识别

二、Session

1、概念:服务端器会话技术,一次对话的多次请求间共享数据,将数据保存在服务器端的对象中HttpSeesion。

2、使用

①获取HttpSession对象

HttpSession session =request.getSession();

②使用HttpSession对象

Object getAttribute(String name)
void setAttribute(String name,Object Value)
void removeAttribute(String name)

3、原理:实现依赖于Cookie

4、关于Session的一些问题

①当客户端关闭,服务端不关闭,两次获取session是否是同一个?

答:默认下,不是。如果需要相同,则可以创建Cookie键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie c = new Cookie("JSESSIONID",session.getId());
c.getMaxAge(60*60);
response.addCookie(c);

②客户端不关闭,服务端关闭,两次获取的session是同一个?

答:不是同一个,但为了确保数据不丢失,tomcat自动完成以下工作:
    session的钝化:
    在服务器正常关闭之前,将session对象系列化到硬盘上
    session的活化:
    在服务器启动后,将session文件转化为内存中的session对象即可

③session什么时候被销毁?

答:a.服务器端关闭
    b.session对象调用invalidate()
    c.session默认失效时间30min
    <session-config>
		 <session-timeout>30</session-timeout>
    </session-config>

5、session的特点:

①session用于存储一次会话的多次请求的数据,存储在服务端

②session相对于cookie来说更安全

三、Cookie和Session不同之处

总结:

①存储数据:session在服务器端,cookie在客户端

②数据大小限制:session无限制,cookie有限制

③安全问题:session更加安全