欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Web基础了解版09-Cookie-Session

程序员文章站 2022-05-20 20:33:58
Cookie Cookie 是一种服务器发送给浏览器以键值对形式存储小量信息的技术。 当浏览器首次请求服务器时,服务器会将一条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存在内存中(注意这里的内存是本机内存,而不是服务器内存)或者本地文件,那之后每次向服务器发送请求,浏览 ......

cookie

cookie

 是一种服务器发送给浏览器以键值对形式存储小量信息的技术。

当浏览器首次请求服务器时,服务器会将一条信息封装成一个cookie发送给浏览器,浏览器收到cookie,会将它保存在内存中(注意这里的内存是本机内存,而不是服务器内存)或者本地文件,那之后每次向服务器发送请求,浏览器都会携带该cookie,服务器就可以根据cookie的信息来处理业务。 

cookie的缺点

  • cookie因为请求或响应是以报文发送,无形中增加了网络流量。

  • cookie是明文传送的安全性差。

  • 各个浏览器对cookie有限制,使用上有局限。 

cookie的创建

  1. 在servlet中创建cookie对象,并添加到response中。

  2. 然后打开浏览器访问servlet程序,服务器将cookie信息发送给浏览器。

  3. 浏览器收到cookie后会自动保存,然后我们可以在下次浏览器发送请求时读取cookie信息。

cookie cookie = new cookie("cookie-name", "cookie-value");
response.addcookie(cookie);

cookie的读取

读取cookie主要指读取浏览器中携带的cookie。

  1. 服务器端获取浏览器传过来的cookie代码:request.getcookies()

  2. 遍历cookie数组,获取所有cookie信息

cookie值的修改

Web基础了解版09-Cookie-Session

// 创建一个已存在key的cookie对象
cookie cookie = new cookie("cookie-name", null);
// 修改cookie的值
cookie.setvalue("this is new value");
// 通知浏览器保存修改,记得再次add
response.addcookie(cookie);

cookie的有效时间

cookie的实例方法setmaxage( ) 控制cookie存活的时间,接收一个int型参数,单位:秒。

  • 参数设置为0,即:setmaxage(0):立即失效,表示浏览器一收到响应后,就马上删除cookie

  • 参数设置大于0:比如setmaxage(60),表示有效的秒数60秒后,cookie失效。

  • 参数设置小于0:比如setmaxage(-1),表示当前会话有效。也就是关闭浏览器后cookie失效,被删除。

  • 如果不设置失效时间,默认为当前会话有效,一旦关闭浏览器,cookie就失效,被删除。

cookie的路径设置

cookie的路径是指告诉浏览器访问哪些地址时应该携带该cookie,也就是未设置的路径不需要携带

我们通过调用cookie的实例方法setpath()来设置,这个路径由浏览器来解析。

  • / :代表服务器的根目录

  • 如果设置有效路径为:/day14/abc,则:下面几个路径能访问到cookie

    • /day14/abc 能获取cookie

    • /day14/xxx.xxx 不能获取cookie

    • /day14/abc/xxx.xxx 能获取cookie

    • /day14/abc/a/b/c 能获取cookie

  • 如果不设置,默认会在访问“/项目名”下的资源时携带

    • 如:“/项目名/index.jsp” 、 “/项目名/hello/index.jsp”

cookie cookie = new cookie("cookie-path", "test");
// 设置cookie的有效访问路径为/day14/abc/下所有资源
cookie.setpath(request.getcontextpath() + "/abc");
// 通知浏览器保存修改
response.addcookie(cookie);

session

由于cookie有一很大的局限,于是session出现了

session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为jsessionid的cookie,所以本质上它也是一个cookie,这个jessionid对应这个服务器中的一个session对象,通过它就可以获取到保存用户信息的session。

session是什么

  • 首先session是jsp中九大内置对象之一

  • 其次session是一个域对象

  • 然后session是在服务器端用来保存用户数据的一种技术。并且session会话技术是基于cookie实现的。

session的创建和获取

  • session的创建时机是在request.getsession()方法第一次被调用时。

    • 补充:request.getsession()之后的调用都是获取已经创建了的session对象,单例模式

  • session被创建后,同时还会有一个名为jsessionid的cookie被创建。

  • 这个cookie的默认时效就是当前会话。

session的工作原理

  • session被创建后,对应的cookie被保存到浏览器中,之后浏览器每次访问项目时都会携带该cookie。

  • 当我们再次调用时会根据该jsessionid获取已经存在的cookie,而不是再创建一个新的cookie。

  • 如果cookie中有jsessionid,但是jsessionid没有对应的session存在,则会重新创建一个httpsession对象,并重新设置jsessionid。

session数据的存取

  • setattribute 设置属性

  • getattribute 获取属性

session的作用域是当前会话,即对应的一个浏览器客户端,一个浏览器一个session对象非一个网页

session 的有效时间

session对象在服务器端不能长期保存,它是有时间限制的,超过一定时间没有被访问过的session对象就应该释放掉,以节约内存。session的计时是从最后一次被访问开始计时,统计其“空闲”的时间。

说明:session对象默认的最长有效时间为30分钟。在tomcat的conf目录下web.xml配置文件中

设置

我们在web.xml文件中配置的session会话超时时间是对所有session都生效的。

setmaxinactiveinterval (int seconds) 设置用户多长时间没有操作之后就会session过期。以秒为单位。

  • 如果是正数。表示用户在给定的时间内没有任意操作,session会话就会过期。
  • 如果是非正数(零&负数)。表示session永不过期。

int getmaxinactiveinterval()  获取超时时间。以秒为单位。

invalidate()  强制失效

session的活化和钝化

  • session钝化:session在一段时间内没有被使用或关闭服务器时,会将当前存在的session对象及session对象中的数据序列化到磁盘的过程,称之为钝化。

  • session活化:session被钝化后,服务器再次调用session对象或重启服务器时,将session对象及session对象中的数据从磁盘反序列化到内存的过程,称之为活化。

如果希望session作用域中的对象也能够随session钝化过程一起序列化到磁盘上,则对象的实现类也必须实现java.io.serializable接口。不仅如此,如果对象中还包含其他对象的引用,则被关联的对象也必须支持序列化,

Web基础了解版09-Cookie-Session

session对象的释放

  • session对象空闲时间达到了目标设置的最大值,自动释放

  • session对象被强制失效

  • web应用卸载

  • 服务器进程停止

url重写

当cookie在浏览器端可能会被禁用时,我们就可以使用url重写。

  • url重写其实就是将jsessionid的值以固定格式附着在url地址后面,以实现保持jsessionid,进而保持会话状态。这个固定格式是:url;jsessionid=xxxxxxxxx

实现方式

  • response.encodeurl(string)

  • response.encoderedirecturl(string)

//1.获取session对象
httpsession session = request.getsession();
//2.创建目标url地址字符串
string url = "targetservlet";        
//3.在目标url地址字符串后面附加jsessionid的值
url = response.encodeurl(url+";jsessionid=97120112d5538009334f1c6deadb1be7");        
//4.重定向到目标资源
response.sendredirect(url);