JavaWeb学习之Cookie和Session

Cookie和Session

Cookie

  • 什么是Cookie
    Cookie是服务器通知客户端保存键值对的一种技术,客户端有了cookie之后,每次请求都会把cookie发送给服务器,而每个cookie的大小不能超过4kb(其实cookie就是保存在客户端也即浏览器的键值对)。
  • 如何创建cookie
    当客户端访问服务器时,服务器可以通过response对象设置cookie对象,并通过响应头Set-Cookie通知客户端保存Cookie——Set-Cookie:key=value。而客户端在受到响应之后,在响应头中查看cookie的key值,如果没有就在客户端创建Cookie保存,已经存在则根据收到的value值进行修改。而客户端每次请求时都会将本地保存的Cookie发送给服务器,这样服务器就可以获取客户端中的Cookie对象了。
//Servlet中的代码
protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
	//创建Cookie对象
	Cookie cookie = new Cookie("key","value");
	//响应告知客户端保存或者创建Cookie
	resp.addCookie(cookie);
	//=======================================
	//当服务器需要获取客户端中的cookie执行操作时,可以通过req请求获取Cookie数组
	Cookie[] cookies = req.getCookies();
	//通过cookie.getName和cookie.getValue就可以获取Cookie中保存的数据进行一些操作了
	String name = cookies[0].getName();
	String value = cookies[0].getValue();
	//=======================================
	//当需要对客户端的Cookie进行修改时,可以创建新的同key值Cookie对象将其传递给客户端,或者找到该Cookie对象,使用setValue方法修改其值,再将其传递给客户端
	Cookie cookieNew = new Cookie("key" , "valueNew");
	resp.addCookie(cookieNew);
}
  • Cookie生命控制
    cookie生命控制指的是管理客户端的Cookie什么时间失效(被删除销毁),使用setMaxAge(int)方法来进行设置
    • 参数值为正数:表示在指定的秒数后被销毁
    • 参数值为负数:表示在浏览器关闭时,Cookie将被自动销毁(默认值为-1)
    • 参数为0:表示立刻销毁该Cookie
  • Cookie有效路径Path的设置
    Cookie的path属性可以有效地过滤那些Cookie可以发送给服务器,有哪些Cookie不会跟随该次请求被发送给服务器。而path属性是通过请求的地址来进行有效地过滤的。
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	Cookie cookieA = new Cookie("path1" , "path1");
	Cookie cookieB = new Cookie("path2" , "path2");
	cookieA.setPath(req.getContextPath() + "/abc");
	cookieB.setPath(req.getContextPath());
	//这表示当通过http://ip:port/工程路径/  ==》 为地址访问服务器时,只有cookieB会被发送给服务器,而cookieA不会被发送给服务器(有点类似于被过滤掉了);而当通过http://ip:port/工程路径/abc/  ==>为地址访问服务器时,cookieA会被发送给服务器而cookieB不会
}

Session

  • 什么是Session会话
    Session就是一个接口(HttpSession),也就是会话,是用来维护一个客户端和服务器之间关联的一种技术。每个客户端都有自己的Session会话对象。在Session中,我们经常会用来保存客户登陆之后的信息。

  • 创建和获取Session
    创建和获取Session的API是一样的,均是request.getSession()。当首次调用时,作用是创建Session对象,之后的调用都是获取创建好的会话对象。

  • isNew():用于判断Session对象是否为新创建出来的

  • getId():每个会话都会有唯一的一个会话Id值,Session会话对象也会有这个ID属性。当调用getId方法时,就会获取该回话对象的id

  • Session域数据的存取:调用session对象的setAttribute和getAttribute方法可以设置获取Session的域数据

  • Session生命周期控制
    public void setMaxInactiveInterval(int interval),用于设置 Session的超时时间(以秒为单位),超过指定时长Session就会被销毁

    • interval为正数表示超时秒数
    • interval为负数表示该Session对象永不超时(极少使用)

    public void getMaxInactiveInterval(),用于获取Session的超时时间
    public void invalidate()让当前Session会话立刻超时无效
    一般在 web.xml中可以使用<session-config>标签中的<session-timeout>标签来设置所有session对象的默认超时时间,而当只需要修改个别session的超时时长时,使用上面的API即可。

    注意,session超时时长指的是客户端两次请求之间的最大时间间隔,当客户端向服务器发出一次请求后,便开始重新计时,并不是session最大存活时间!

  • 浏览器和Session之间的技术关联
    实际上,Session技术是以Cookie技术为核心实现的。客户端向服务器发送请求该会话被建立后,当服务器使用getSession建立Session会话对象时,会同时创建出一个Cookie对象。该Cookie对象的key值永远是JSESSIONID,而cookie的value值则是创建出的Session对象的ID属性值。服务器随后通过相应会一并将该Cookie发送给客户端,这样客户端便保存了以"JSESSIONID" - sessionID为键值对的Cookie对象,从而能够与保存在服务器端的Session对象建立联系。之后客户端的每次请求都会将该Cookie发送给服务器,这样服务器便能够识别该会话唯一的Session对象了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值