session的理解,node中使用session

2 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

Web应用程序是使用HTTP协议传输数据的。而HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话,无法辨别这个请求是哪一个用户发出的,这样的话就会造成数据混乱,用户的数据没有安全的保障,整个程序处于混乱的状态,这显然是不行的——于是会话跟踪技术应运而生,弥补了HTTP协议的不足之处。

会话跟踪是web程序中最常用的技术,通过跟踪用户的整个会话,来辨别是否是同一用户,用于确认用户的身份,保证用户所有的请求操作都属于同一个会话,保证了用户信息的安全私密性,也使得程序井然有序,常用的会话跟踪技术有两种Cookie和Session,这里我们讲Session

一.什么是Session?

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(Session),是一种记录客户状态的机制,他不同与Cookie,Session是保存在服务器端,。客户端浏览器访问服务器的时候,服务器把客户端信息以类似散列表的结构形式记录在服务器上。这就是Session。

二.Session的工作原理

Cookies的工作原理是:由于服务器从连接上不能辨别用户和记录用户的操作信息,所以引入的Session,而Session就好像一个用户独有的“信息仓库”,当客户端进行第一次请求,服务器就会生成一个"信息仓库和仓库钥匙"给这个客户端,当客户端再次请求(请求+“仓库钥匙”),服务器从“仓库钥匙”上辨认出,这就是xx用户的请求打开专有的“信息仓库”,这样的话我们就可以辨别每个请求对应的用户身份和信息,不会造成数据混乱。

当服务器需要为客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了Session id,如果Session id存在则说明已经为此客户端创建过Session,服务器就按照Session id把这个Session检索出来使用,r如果没有找到该Session,就会重新创建新的Session,如果客户端请求不包含Session id,则为此客户端创建一个Session并且生成该Session独有的Session id,Session id的值应该是不会重复的24字母组成的的字符串,这个Session id将被在本次请求中返回给客户端保存,用作下次请求进行服务器身份判断,会话状态的保持就是一次次的对接“暗号”中保持进行的。

三.Session的常用方法

四.Session的超时时间设置

Tomcat的Session超时时间默认为30分钟(也就是指客户端如果有30的时间没有和服务器保持会话,则服务器就默认为此Session已经无用,会自动清除此Session,释放服务器资源),在实际项目中通常我们不希望我们的服务器的Session超时时间如此的长,所以我们可以设置Session的超时时间

1.session.setMaxInactiveInterval(600);参数单位是秒,即在客户端与服务端连续10分钟没有进行会话,Session将失效。

2.在项目的web.xml中设置,参数单位是分钟,设置为0或-1,则永久不会失效

1

3.服务器中设置,如Tomcat,找到根目录下conf/web.xml中找到,设置参数,单位分钟

4.人工进行Session销毁:

HttpSession session = request.getSession();

session.invalidate();

如果前三种方法都设置了,则优先级1>2>3

如若我们要提示用户Session已过期,我们应该在过滤器中进行判断,由request.getSession(); 得到的Session是否为空,jsp页面应该禁用它自己创建Session(这会影响判断用户Session是否超时过期)

五.Session在客户端禁用Cookie的环境下的使用

一般保存Session id是用Cookie保存,该Cookie为服务器自动生成的,(它的有效时间一般设为–1,表示仅当前浏览器内有效,关闭浏览器就会失效),再次请求由该Cookie携带Session id访问服务器,但客户端有时会禁用Cookie,因此还可以通过URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,另一种是作为参数附加在URL后面

当我们把客户端的Cookie功能禁用,这个时候就用到我们的URL重写的技术,response中提供了两个方法进行URL的重写,encodeRedirectURL与encodeURL,它们使用的时候会先判断Session是否超时,是创建新Session,否则进行判断客户端是否禁用Cookie,是则在返回的URL中加上Session id,否则直接返回URL,前者用于重定向,仅与res.sendRedirect一起使用

1.jsp页面使用:<a href="<%=response.encodeURL(“http://localhost:8080/school/selectUser”)%>">查询

from表单等用法相同

2.jstl使用:">查询

  1. Java代码使用:

(1)response.encodeURL(String url);然后通过jstl,response等方式写到页面上

(2) encodeRedirectURL方法用于重定向地址,response.sendRedirect(response.encodeRedirectURL(String url));

4.通过过滤器设置每个请求的URL带Session id参数

5.手动的创建Cookie,把Session id放入Cookie中

6.表单隐藏域使用(极其不推荐):(<input type=“hidden”

name=“JSESSIONID” value="CDAE18ABD46C4BE442DA8335B85A6536”>)

六.Session的优缺点

优点:

1.Session中能够存取复杂的的数据,比如Java对象,使得数据交流更加简单有效

2.Session存储在服务器中,安全性隐私性较高

3.Session实例是轻量级的,不需要占用服务器太多资源

缺点:

1.因为Session保存在服务器,但有大量的Session保存在服务器,会耗费大量服务器内存

2.Cookie依赖性,因为Session id存储在Cookie中,Cookie被禁用,就没有Session id,就找不到Session,造成Session失效的假象

3.不可跨域性,比如A网站登录访问B网站,它的Session并不能传递过去,不能公用,这就涉及跨域问题(想了解的自行百度)

4.Session容易丢失,比如服务器重启

七.对Session的容易出错的认知

1.Session的创建

Session不是只要客户端访问服务器就被创建,例如你访问静态资源服务器就不会生成Session,Session的生成与HttpServletRequest.getSession()语句有关,Tomcat服务器生成Session时就会执行这一句,所以当程序执行这个语句Session才被创建(代码中可不写,编译会加上)

2.Session关闭浏览器就过时,失效

关闭浏览器失效的是存储Session id的Cookie,而Session id对应的Session还在服务器中保存着(除非手动的调用清除Session方法和Session过时),所以就造成了Session"失效",“过时”,"被清除"的假象

3.客户端打开两次,一次为A,一次为B,用的是不同的Session

客户端打开两次,一次为A,一次为B,在session没有失效之前它们的所使用的的Session是相同的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值