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

概述

会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话。会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一些数据,通过会话技术可以将其保存起来。常见的会话技术cookie、Session。

Cookie

Cookie称之为浏览器端的会话技术
Cookie是由服务端生成,通过response将cookie写会浏览区(set-cookie),保留在浏览器上,下一次访问,浏览器根据一定的规则携带不同的Cookie(通过request请求头),我们服务就可以接受Cookie。

Cookie基本使用

// 创建Cookie
Cookie cookie = new Cookie("key", "value");
// 将cookie协会浏览器
response.addCookie(cookie);

// 获取浏览器携带的Cookie 返回的是Cookie数组
Cookie[] cookies2 = request.getCookies();
for (Cookie cookie2 : cookies2) {
    // 获取某个cookie的key
    String key = cookie2.getName();
    String value = cookie2.getValue();
}

由于服务端可以向客户端通过response写入多个cookie,因此通过request获取cookie返回的是Cookie数组,如果之前未向浏览器写入过cookie,获取的cookie数组返回时null值不要直接就遍历,否则造成空指针异常。

Cookie其它API

// 设置Cookie有效域名
void setDomain(String str);
// 设置Cookie的有效时长
void setMaxAge(int maxAge);  setMaxAge(0); --- 删除持久的Cookie

Cookie注意事项

Cookie保存的时候一个浏览器上对Cookie的个数和大小都是由限制的.
Cookie默认不能保存中文.
- URLEncoder.encode();
- URLDecoder.decode();

Session

Session称之为服务端的会话技术
当我们第一次访问服务器的时候,服务器会获取SessionId,如果不能获取id,则创建一个session,将您的数据保存到session中,将当前的sessionId返回给浏览器。如果能获取到id,就根据此sessionId去获取Session,如果根据id获取不到session就创建一个session,将数据保存,返回id给客户端。返回id给客户端还是基于Cookie会话技术。

Session基本使用

// 根据request获取session
HttpSession session = request.getSession();
// 往session中写入数据 key value形式
session.setAttribute("name", "jake");

// 根据key从session获取value
session.getAttribute("name");

Session的声明周期

Session是一个域对象,保存在服务端,第一次调用request.getSession()创建。销毁三种情况

  • session过期:默认过期时间30分钟 web.xml默认配置
  • 非正常关闭服务器:(正常关闭服务器 序列化到硬盘)
  • 调用session.invalidate()

原文地址:https://www.cnblogs.com/CoderHong/p/9484578.html

时间: 2024-10-08 07:45:40

Java开发系列-Cookie与Session会话技术的相关文章

Session会话技术

Session会话技术是基于Cookie的 Session会话技术也是在多次请求间共享会话技术,区别于Cookie的是,Sesiion是将多次请求间的数据保存在服务端 session会话原理. 1 通过request.getSession即可. 2当创建session会话对象后,session对象会创建一个Cookie并且Cookie的键为Jsessionid,值为一串唯一表示的字符串 3并且将此Cookie响应给客户端浏览器,当浏览器下次访问时,会继续携带此Cookie来服务器,,那么tomc

Cookie&&Session会话技术之再体验

1.转发与重定向[****]    * 重定向:重新确定请求方向        * 发送者:服务器 --> 响应(response)浏览器        * 执行者:浏览器 --> 重新请求        * 跳转        * response.sendRedirect("/day04/1.html");        * //完全等价,隐藏了HTTP协议的具体要求        * response.setStatus(302);        * response

Java开发工程师(Web方向) - 02.Servlet技术 - 期末考试

Servlet课程考试 Servlet课程考试 Servlet课程考试 总分:55分 限定时间:120分钟 进入考试 答案已成功提交!请耐心等待成绩公布 Servlet课程考试: 1(12分) 简单谈一下你理解的Servlet是什么,以及Servlet的工作原理. Servlet即Server Applet,是在服务器端运行的程序.一个Servlet对象实际上就是一个Java类. 浏览器在与服务器通信时,浏览器先向服务器发出请求,该请求被Servlet容器解析并发送给对应Servlet对象后,由

【java开发系列】—— JDK安装

前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行java开发,是要使用JDK的,它是专门给开发人员使用的API工具包,编译器,JRE等等.而JRE是java相关的应用程序运行时所需要的环境,所以相对于JDK来说,提供的东西要少一些. 比如,我们进行开发时,要去JDK的路径下寻找相应的jar包或者lib使用它其中的函数.而我们使用的eclipse本身

【java开发系列】—— struts2简单入门示例

前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码. 过去,我们用jsp和servlet搭配,实现展现时,大体的过程是: 1 jsp触发action 2 servlet接受action,交给后台class处理 3 后台class跳转到其他的jsp,实现数据展现 现在有了stru

Java Web 禁用Cookie对Session的影响

如果客户端禁用了Cookie,那么服务端就不能得到Session了.因为通过Session ID来确定当前会话对应的服务端Session,而Session ID通过Cookie来传递,所以禁用Cookie相当于失去了Session ID,也就得不到Session了. 禁用Cookie时使用Session即传递Session ID的实现方式如下: 1 PHP自动跨页传递 设置php.ini配置文件中的"session.use_trans_sid = 1",或者编译时启用"--e

【java开发系列】—— 自定义注解(转)

之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类. 注解都是什么呢?看下面这张图就明白了! 上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解 这里面Override这个没测试出来,因为目前的Eclipse会自动帮我们排错

【java开发系列】—— spring简单入门示例

1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转\依赖注入,和AOP面向切面编程. 1 控制反转IOC\依赖注入DI,因为翻译的不同,因此有两个名字. 控制反转意思就是说,当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring). 依赖注入意思就是说,spring主动创建被调用类的对象,然后把这个对象注入到我们

【java开发系列】—— JAVA面试题(1)

今天参加笔试,里面有设计模式,和一些基础题! 印象最深的是:什么不是Object的函数,我蒙的finalize,哎,无知! 还问了,接口与抽象类的不同,还有多线程的实现方式!下面基本都有. 另外还问了,观察者模式,设计模式,我一点不会,看来要下功夫了! 1.  面向对象编程的三大特性是什么,请简要阐述 (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 承了原始类的特性,新类称为原始类