一、会话技术简介

1.什么是会话,为什么需要会话技术?

会话:从打开一个浏览器,访问某个网站,到关闭这个浏览器的这个过程称为一次会话。http协议是状态的。

2.会话技术的分类

客户端存储技术:Cookie

服务端存储技术:Session

Cookie和Session的区别?

1)存储在Cookie中的用户的信息 存在客户端,Session将数据存储在服务器端,但是需要在客户端存储Session的编码id

2)安全性而言 Cookie相对不安全 Session相对安全

3)性能而言:根据实际的情况

二、会话技术之Cookie

Cookie技术是将数据存储到客户端

1.怎样去向客户端写出一个cookie

1)创建Cookie对象

Cookie cookie = new Cookie(name,value);

2)向客户端写出cookie

response.addCookie(cookie );

客户端:客户端解析http响应,响应头中有一个cookie,客户端会自动将cookie的信息存储到客户端的缓存中

2.怎样从客户端获取一个Cookie

1)获得客户端携带的所有的cookie

Cookies[]  request.getCookies();

2)获得具体的某个cookie

遍历所有的cookie

通过getName()获得某一个cookie的名字

通过getValue()获得某一个cookie的值

3.设置Cookie时的细节

1)会话级别的cookie和持久级别的cookie

会话级别的cookie:会话结束cookie就清空

持久级别的cookie:会cookie存储到磁盘上

保存在磁盘上的时间

cookie.setMaxAge(秒);

注意:如果要想删除磁盘已经存储的cookie

将同名的cookie的持久化时间设置为0

将要删除的cookie的路径设置成与磁盘上存储的cookie的路径一致(即两个cookie的setPath一致)

2)设置cookie的携带的路径

cookie在默认情况下 会在产生的cookie资源的所在的目录下都携带

cookie.setPath(携带cookie的路径);

设置cookie的携带路径时以/开头,/代表本web服务器

例如:

cookie.setPath(“/”), cookie在访问web服务器下的所有资源的都携带

cookie.setPath(“/home”),在home应用时携带cookie

3)设置三方cookie(了解)

cookie.setDomain(域名);

三方cookie具有进攻性

4.以上代码实现

         response.setContentType("text/html;charset=UTF-8");
//1、创建时间的Cookie
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String accessTime = format.format(new Date());
Cookie cookie = new Cookie("accessTime",accessTime);
//1.1 设置cookie的持久化的时间----在磁盘上存储的时间
//cookie.setMaxAge(60*10);
//1.2 设置cookie的携带路径 /代表web服务器
cookie.setPath("/day11_208/abc/accessTime");
//2、将cookie写给客户端
response.addCookie(cookie);
//3、获取客户端携带的时间的cookie
String accessTime_client = null;
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie coo:cookies){
//取出美哟个cookie对象的名字
String cookieName = coo.getName();
if("accessTime".equals(cookieName)){
//取出该cookie的值
accessTime_client = cookie.getValue();
}
}
} //4、为用户显示上次访问时间
if(accessTime_client!=null){
response.getWriter().write("您的上一次访问时间是:"+accessTime_client);
}else{
//第一次访问
response.getWriter().write("您是第一次访问");
}

三、会话技术之Session

1.怎样去创建session/获得session

HttpSession session = request.getSession();

上述方法的内部原理:

当request在调用getSession方法时,内部会去查看一下该用户是否在web应用的内部存在一块内存区域,如果有直接返回这个内存区域的地址,如果没有就创建一个新的session区域

服务器端通过什么判断用户是否已经存在session的呢?

根据session的编号id--->JSESSIONID

2.session的生命周期

创建:第一次调用request.getSession()

销毁:

1)服务器关闭 session销毁

2)session超时 默认30分钟

计算点从何时开始:最后一次操作该站点后的30分钟

3)手动销毁session

session.invalidate();

3.Session是一个域对象

Session是借助于Cookie的,同一个Session的标志就是JSESSIONID相同。

如果将浏览器关闭,在打开访问资源,会重新创建session

怎样将session持久化----->存储JSESSIONID的Cookie持久化

抓包工具获得:

Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/day11_208/;

手动创建一个Cookie 在上面的cookie的基础上 多一个max-age

         //手动创建Cookie存储JSESSIONID
//Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/home/;
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setPath("/home/");
cookie.setMaxAge(60*10); response.addCookie(cookie);

如果客户端禁用Cookie,客户端不能在存储Cookie,JSESSIONID丢失,解决?

解决方案:URL重写,在每个url地址后都使用分号;拼接JSESSIONID

         HttpSession session = request.getSession();
System.out.println(session.getId());
String url = "/home/index.jsp";
url = response.encodeRedirectURL(url);
System.out.println(url);
response.sendRedirect(url);

http://localhost/home/index.jsp;jsessionid=377B2F0501FF9FE643D7D88F4E883FFD

Java实战之04JavaWeb-03会话技术的更多相关文章

  1. Java Web之会话技术

    客户端与服务器通信过程中,会产生一些数据.比如,A和B分别登陆了某宝购物网站,A买了一个Android手机,B买了一个iPhone手机,当结账时,web服务器需要分别对用户A和B的信息分别保存.根据J ...

  2. Java Web 会话技术总结

    会话技术 会话概念 一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止,一次会话结束. 会话的功能 在一次会话的范围内的多次请求间,共享数据. 会 ...

  3. Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)

    一.会话技术  1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的.  2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...

  4. Java精选笔记_会话技术

    会话及其会话技术 会话概述 指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程. 会话:从浏览器开启到浏览器关闭.会话技术:用来保存在会话期间 浏览器和服务器所产生的数据. 在 ...

  5. java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用)

    java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用) 这是我关于会话技术的第二篇文章,对 Cookie有不了解的兄弟可以点击下方的Cookie跳转 Cookie链 ...

  6. JAVA基础之会话技术-Cookie及Session

    至此,学习Servlet三个域对象:ServletContext(web项目).request(一次请求).Session(一个客户端)!均有相同的方法! 从用户开始打开浏览器进行操作,便开始了一次会 ...

  7. Java EE会话技术Cookie和Session

    会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...

  8. Java开发系列-Cookie与Session会话技术

    概述 会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一 ...

  9. java ->会话技术Cookie&Session

    会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...

随机推荐

  1. 线程池QueueUserWorkItem

    // Test1.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...

  2. SkinSharp用法

    SkinSharp又称Skin#,是很好用的一款轻量化的VC程序美化工具 官网地址是http://www.skinsharp.com/ 尽管SkinSharp是收费软件,但提供试用版,并且比較厚道,试 ...

  3. Proteus仿真_01、 8086 IO译码仿真

    最近在学习一些微机原理与接口技术方面的知识. 参考书籍<微机原理与接口技术---基于8086Proteus仿真> 顾晖 梁惺彦 编著 实验一.利用8086 芯片来实现对I/O设备的读取和控 ...

  4. ExpandableListView 箭头靠右

    ExpandableListView 默认标示箭头是在左边的,当左边有图片时,不是太好看,想把它放在右边,这么简单的事可我折腾死了,还好给我找到了. 参照了以下链接: expandableListvi ...

  5. pthread实现多线程查询(转)

    导读:大多数网站的性能瓶颈不在PHP服务器上,因为它可以简单地通过横向增加服务器或CPU核数来轻松应对(对于各种云主机,增加VPS或CPU核数就更方便了,直接以备份镜像增加VPS,连操作系统.环境都不 ...

  6. MySQL锁系列2 表锁

    http://www.cnblogs.com/xpchild/p/3789068.html   上一篇介绍了MySQL源码中保护内存结构或变量的锁,这里开始介绍下MySQL事务中的表锁. 注1: 在表 ...

  7. oracle procedure存储过程(pl/sql)_使用declare cursor_begin end嵌套

    create or replace procedure PRO_DelArticles ( ArticleId in varchar2 ) is ArticleNum varchar2(20); sq ...

  8. MII接口全家福

    转载:http://blog.chinaunix.net/uid-24148050-id-131084.html 简介:    MII是英文Medium Independent Interface的缩 ...

  9. X-Sequence

    Description Let {xi} be the infinite sequence of integers: 1) x0 = A; 2) xi = (alpha * xi-1^2 + beta ...

  10. markdownpad2 pro注册信息升级 破解版

    注册信息邮箱地址: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2 ...