失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > servlet会话技术 cookie和session

servlet会话技术 cookie和session

时间:2023-10-23 14:14:05

相关推荐

servlet会话技术 cookie和session

文章目录

会话机制Cookie对象Cookie的修改和删除Cookie的有效期Cookie的生命周期Cookie的路径Session对象会话运作流程(生命周期)通过重写URL来跟踪会话request获取Sessionsession常用方法Servlet容器创建新的会话Servlet容器销毁会话会话过期的意义会话的持久化Session监听器示例Cookie和Session区别

会话机制

在Web应用中,会话机制是用于跟踪客户状态的普遍解决方案。

HttpSession可以保存跨同一个客户 多个请求的会话状态

相同客户,相同servlet,不同请求,不同线程,相同会话不同客户,相同servlet,不同请求,不同线程,不同会话相同客户,不同web应用,不同请求,不同线程,不同会话相同客户,同一个web应用,不同请求,不同线程,相同会话

Cookie对象

Cookie是一种会话技术,它用于将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好地进行数据交互。

服务端向客户端发送Cookie,再响应头字段增加Set-Cookie响应头字段

Set-Cookie:user=itcast;Path=/;

user:Cookie名称itcast:Cookie的值Path:Cookie属性

Cookie必须以键值对的形式存在,Cookie一旦创建,名称不能更改,值可以修改。

response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)

Cookie的修改和删除

Cookie不提供修改、删除操作。

修改:新建一个同名的Cookie,添加到response中覆盖之前的。删除:新建一个同名的Cookie,并将maxAge设置为0,添加到response中覆盖之前的。

Cookie的有效期

maxAge决定这Cookie的有效期,单位为秒

maxAge属性为正数:Cookie在maxAge秒后自动消失maxAge属性为负数:表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口有效,关闭窗口后该Cookie即失效。maxAge为0:表示删除该Cookie

从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。

Cookie的生命周期

如果没有设置有效期,那么数据不会存在硬盘上,关闭浏览器则cookie消失。如果设置有效期,那么数据会存在硬盘上,即使关闭了浏览器,只要没有过有效期,则该cookie一直存在,等下次打开的时候也会存在。

Cookie的路径

cookie.setPath("/")

表示允许所有路径使用Cookie。path属性需要使用符号“/”结尾

cookie.setPath("/app2/")

表示只有app2应用可以访问此Cookie,其他不行

cookie.setPath("/app1/sub/")

表示只有app1应用下的/sub子路径下的web组件能访问该Cookie

Session对象

Session是一种将会话数据保存到服务器端的技术。在servletAPI中定义了代表会话的HttpSession接口,存放表示客户状态的信息。容器为每个HttpSession对象分配一个名为JSESSIONID的唯一标识符,Session IDSession是借助Cookie技术来传送ID属性的

会话运作流程(生命周期)

服务器向客户端浏览器发送一个名为JSESSIONID表示Session ID的Cookie,容器寻找该Cookie,若不存在则创建一个HttpSession对象,为他分配唯一Session ID,作为Cookies添加到HTTP响应结果中。浏览器将Cookies保存在客户端浏览器进程继续请求访问第一步中的Web应用中任意一个支持会话的网页,在本次HTTP请求中包含表示SessionID的Cookies。所以此次请求已经处于一个会话中了,Servlet容器不再创建新的HttpSession对象,在内存中找到对应的HttpSession对象。浏览器进程重复步骤二,直到当前会话销毁Httpsession对象就会结束生命周

通过重写URL来跟踪会话

服务器对客户端进行读写Cookie操作,会给客户端带来安全隐患。所以多数浏览器可以设置是否启动Cookie,当浏览器禁用Cookie时,服务器就无法对客户进行读写Cookie操作。Servlet容器可以重写Web组件的URL,把Session ID添加到URL信息中,调用encodeURL(String url)重写URL方法用户第一次访问程序时,都会对url地址进行重写。

request获取Session

getSession():如果不存在则返回null

getSession(boolean create):如果不存在且参数为true,则新建一个,返回新的HttpSession对象

getSession()可能产生发生会话标识号的Cookie头字段,因此必须在发送任何响应内容之前先调用getSession()方法。

session常用方法

void setAttribute(String attribute, Object value):设置Session属性。value参数可以为任何Java Object。通常为Java Bean。value信息不宜过大

String getAttribute(String attribute):返回Session属性

Enumeration getAttributeNames():返回Session存在的属性名

void removeAttribute(String attribute):移除Session属性

String getId():返回Session的ID。该ID由服务器自动创建,不会重复

void setMaxInactiveInterval(int second):设置Session的超时时间。单位为秒

Tomcat中Session的默认超时时间为20分钟。通过setMaxInactiveInterval(int seconds)修改超时时间。可以修改web.xml改变Session的默认超时时间,参数的单位为分钟。

boolean isNew():返回该session是否为新建

void invalidate():是该session失效

Servlet容器创建新的会话

一个浏览器进程第一次访问Web应用中的支持会话的任意网页当浏览器经常与Web应用的一次会话已经被销毁后,浏览器进程再次访问Web应用中的支持会话的任意一个网页。

Servlet容器销毁会话

浏览器进程终止(浏览器突然关闭,Servlet容器端不会立刻知道,因此不会立即结束HTTPSession对象的生命周期,但关闭进程,会话进入不活动状态,等超过时间,就会被销毁)服务器执行HttpSession对象的invalidata()方法会话过期

会话过期的意义

及时释放无效HttpSession对象占用内存的空间防止未授权用户访问会话,提供Web应用的安全性。

会话的持久化

持久化:把内存中的HttpSession对象保存到文件系统或数据库中。

好处

节约内存空间,提高对内存资源的利用率确保在服务器重启或单个Web应用重启后,能恢复重启后的会话。

Session监听器示例

MyData:实现HttpSessionBindingListener和HttpSessionActivationListener接口,并序列化。MySessionLifeListener:实现HttpSessionListener和HttpSessionAttributeListener接口。

用HttpSessionListener统计在线用户人数

Cookie和Session区别

cookie数据存放在客户的浏览器上,临时文件夹中,session数据放在服务器上,一个session域对象为一个用户浏览器服务.cookie不会占用服务端内存,存在于客户端内存或cookie文本文件中。session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。cookie是明文传输,安全性低,可以通过一个加密算法进行加密后存放;而session存在于服务端是可靠的。单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)应用场景:

Cookie:判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。

另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信息,当然这里面有了安全和性能问题需要我们考虑了。

不要保存私人信息。任何重要数据,最好通过加密形式来保存数据(最简单的可以用URLEncode,当然也可以用完善的可逆加密方式,遗憾的是,最好不要用md5来加密)。是否保存登陆信息,需有用户自行选择。长于10K的数据,不要用到Cookies。也不要用Cookies来玩点让客户惊喜的小游戏。

Session:登录等重要信息。

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。

关闭浏览器,再打开新浏览器并发送请求,会生成了一个与关闭浏览器之前不同的新的session对象。当浏览器关闭后,其所占的内存就会是放掉,cookie自然也就被清除了,此时我们不再保存有这个sessionID。所以再打开浏览器访问同一个页面时,由于没有sessionID,也就查不到对应的session对象,此时重新创建一个新的session对象。

都写的很好,可以看看

Cookie和Session的区别

Cookie和Session的生命周期

关闭浏览器session就消失了吗

注意:session很容易失效,用户体验很差;

虽然cookie不安全,但是可以加密 ;

cookie也分为永久和暂时存在的;

Cookie和Session的区别

/l199616j/p/11195667.html

如果觉得《servlet会话技术 cookie和session》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。