在了解session和cookie技术之前,我们需要先了解一下什么是会话?会话可以简单理解为用户打开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程称为一个会话。这样,在一次会话过程中,用户在访问web资源的过程中,各自产生了一些数据,那么用户如何来保存这些数据呢?举个简单例子,假如我们的网站是一个购物的网站,如果用户点击了购买的servlet的之后产生了一条购买的商品数据,这个数据应该存到哪里呢?那么当该用户点击付款servlet的时候,又从哪里去获取上次购买之后产生的商品数据呢?对于这个问题的结果,我们有两种解决方案,那就是基于cookie的客户端会话保存技术,和基于服务端的会话保存技术。

1.cookie技术

①cookie技术的说明:cookie是客户端的技术,程序把每个用户的数据以cookie的形式写给用户自己的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去,这样web资源处理的就是用户各自的数据了。

②cookie实现会话数据共享原理图:

③基于cookie技术实现显示用户上一次访问网站的时间,示例代码如下所示:

package com.servlet;

import java.io.IOException;
import java.util.Date; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 基于session的回显上次访问时间的案例
*
* @author Administrator
*
*/
@WebServlet("/slad.do")
public class ShowLastAccessDateServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 涉及到中文,解决下乱码问题
response.setCharacterEncoding("UTF-8");
// 告诉浏览器以什么方式和编码打开
response.setContentType("text/html; charset=UTF-8");
// 1.回写上次的访问时间
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies != null && i < cookies.length; i++) {
if (cookies[i].getName().equals("lastAccessTime")) { Date date = new Date(Long.parseLong(cookies[i].getValue()));
response.getWriter().print("您上次的访问时间是:" + date.toLocaleString());
}
} // 2.记录下这次的访问时间
Cookie dateCookie = new Cookie("lastAccessTime", System.currentTimeMillis() + "");
// 设置cookie的有效时间,单位为秒,这里设置一个月
dateCookie.setMaxAge(30 * 24 * 3600);
// 设置那些url地址访问有效,这里设置是整个项目访问都有效
dateCookie.setPath("/JavaWebDemo/");
// 加入到response中
response.addCookie(dateCookie);
} }

2.session技术

①session技术的说明:session是服务端的技术,利用这个技术,服务器在运行时可以为每个用户的浏览器创建一个其独享的session对象,由于session对象为用户浏览器独享,所以用户在访问web资源时,可以把各自的数据放到各自的session中,当用户再去访问服务器中的其他的web资源时,其他web资源再从用户各自的session中取出数据为用户服务。

②session的实现原理是基于cookie机制的,如下图所示:

③因为服务器在创建session的时候,写给浏览器的cookie是没有设置有效期,所以当用户把浏览器关了之后,那么当用户重新带开浏览器访问我们的项目的时候,cookie不存在了,所以之前存到session中的数据无法取到了,要保持原来的session有效,不让数据丢失,我们可以自己手动创建一个和session写给浏览器一摸一样的cookie只是多了个有效期而已,这样就能够解决浏览器关闭之后,再次打开浏览器,就能访问到之前存到session中的数据了,示例代码如下所示:

// 获取session对象
HttpSession session = request.getSession();
// 重写cookie返回给浏览器
Cookie cookie = new Cookie("JSESSIONID", session.getId());
// 设置有效期,时间为秒
cookie.setMaxAge(30 * 60);
// 设置path
cookie.setPath("/JavaWebDemo");
// 加入到response对象中
response.addCookie(cookie);

④session实现会话数据共享原理图:

⑤基于session技术实现显示用户上一次访问网站的时间,示例代码如下所示:

package com.servlet;

import java.io.IOException;
import java.util.Date; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* 基于cookie的回显上次访问时间的案例
*
* @author Administrator
*
*/
@WebServlet("/slat.do")
public class ShowLastAccessTimeServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 涉及到中文,解决下乱码问题
response.setCharacterEncoding("UTF-8");
// 告诉浏览器以什么方式和编码打开
response.setContentType("text/html; charset=UTF-8");
// 1.回写上次的访问时间,这里面设置了false,代表当没有session的时候,不重新创建session
HttpSession session = request.getSession(false);
if (session != null && session.getAttribute("lastAccessTime") != null) {
Date date = new Date(Long.parseLong(session.getAttribute("lastAccessTime").toString()));
response.getWriter().print("您上次的访问时间是:" + date.toLocaleString());
} // 2.记录下这次的访问时间
request.getSession().setAttribute("lastAccessTime", System.currentTimeMillis() + ""); } }

至此,一个简单cookie和session实现会话数据共享说明完毕,有不足的地方,希望大家多多提意见!

JavaWeb基于session和cookie的数据共享的更多相关文章

  1. 基于session和cookie的登录验证(CBV模式)

    基于session和cookie的登录验证(CBV模式) urls.py """cookie_session URL Configuration The `urlpatt ...

  2. javaweb学习——session和Cookie实现购物车功能

    1.创建Book类,实现对图书信息的封装. package cn.it.sessionDemo.example1; import java.io.Serializable; /** * 该类实现对图书 ...

  3. JavaWeb基础-Session和Cookie

    JSP状态管理 http的无状态性,服务器不会记得发送请求的浏览器是哪一个 保存用户状态的两大机制:session和cookie Cookie:是web服务器保存在客户端的一系列文本信息 作用:对特定 ...

  4. JavaWeb 基于Session的用户登陆注销实现

    通过Session来存储用户的部分登陆信息来验证用户是否在线,这应该时最容易实现的一种Web端方案,本文以SSM(Spring.SpringMVC.myBatis)框架为载体,来具体实现这套登陆系统. ...

  5. 基于javaWeb阶段下的Cookie和Session总结

    1. 会话技术   就是用户在使用浏览器浏览界面的时候,去访问多个页面后一次性关闭浏览器,这个过程叫会话,学习会话技术就是在客户端与服务器进行交互的时候为了能更好的保存数据.在java中会话技术只有C ...

  6. JavaWeb—Session与Cookie

    概念 会话:指从一个浏览器窗口打开到关闭期间的一系列动作(可简单理解为用户开一个浏览器,点击多个链接,访问服务器多个web资源,然后关闭浏览器). HTTP协议是无状态协议:每次连接(比如同一个网站的 ...

  7. javaWeb学习-----session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  8. JavaEE基础(04):会话跟踪技术,Session和Cookie详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...

  9. Java Web 深入分析(9) Session 和 Cookie

    前言: session 和cookie都是为了保持服务器和客户端之间交互状态.如果一天的PV有几亿,而一个cookie占200个字节但是也会占用很多带宽?所以大访问量就引用session,但是几百台服 ...

随机推荐

  1. php实现aes加密类

    php实现的aes加密类,代码中有使用方法. <?php //php aes加密类 class AESMcrypt { public $iv = null; public $key = null ...

  2. 线程相关函数(2)-pthread_self()获取调用线程ID

    获取调用线程tid #include <pthread.h>pthread_t pthread_self(void); 示例: #include <pthread.h> #in ...

  3. vue-cli 中实现简单动画效果 (vue2.0)

    1,写一个简单的headcomp组件如下: <template> <div class="box"> <transition name="m ...

  4. GDB和WinDbg中调用函数

    GDB: 特别简单,直接写调用式子即可,如下图的p word.c_str(),其中word的类型是std::string WinDbg:目前都说是.call命令,说实话我宁愿不用...见: http: ...

  5. lua错误收集

    这里放一些我遇到的lua错误,希望大家分享一些错误给我,统一放在这里. 1.lua表的引用传值 上面的代码运行后会发现t2[2],t2[3]表里的内容也被删除了,实际上它们 与t2[1]表里的内容都是 ...

  6. STM32CubeMX新建工程+基本IO配置过程

    Ⅰ.写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍.下载与安装 STM32CubeMX使用方法及功能介绍 本文接着上一篇文章结合基本IO配置实例,讲述关于STM32CubeM ...

  7. centos7系统根目录扩容

    比如 点击了后 点击创建虚拟磁盘 选择一个 20G  然后启动虚拟机使用fdisk查看所有的磁盘 看是否新增了一个20G的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev ...

  8. CSS浮动与清除浮动(overflow)例子

    在css中浮动与清除浮动功能是我们开发中常用到的一个功能了,下面小编来为各位分析关于CSS浮动与清除浮动(overflow)例子吧. float脱离文本流,可是为什么文字却会有环绕的效果,这点实在是神 ...

  9. 第二百六十四节,Tornado框架-基于正则的动态路由映射分页数据获取计算

    Tornado框架-基于正则的动态路由映射分页数据获取计算 分页基本显示数据 第一步.设置正则路由映射配置,(r"/index/(?P<page>\d*)", inde ...

  10. 【BZOJ】1037: [ZJOI2008]生日聚会Party(递推+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1037 看来自己越来越弱了... 这些计数题设计的状态都很巧妙,,自己智商太低QAQ 和矩阵dp做的那 ...