session是什么意思(session在java中是什么意思)[亲测有效]

session是什么意思(session在java中是什么意思)[亲测有效]点击关注快速晋级高级架构师。 作者:曾德 一、会话的概念 会话可以简单理解为:用户打开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器。整个过程称为会话。 二、会话过程中要解决…

大家好,我是讯享网,大家多多关注。

点击关注快速晋级高级架构师。

作者:曾德

一、会话的概念

会话可以简单理解为:用户打开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器。整个过程称为会话。

二、会话过程中要解决的一些问题

每个用户在使用浏览器与服务器对话的过程中,都不可避免地会产生一些数据,程序应该为每个用户找到保存这些数据的方法。

三、保存会话数据的两种技术

1、饼干

Cookie的意思是“曲奇”,是W3C提出的一种机制,最早由网景社区开发。目前cookie已经成为标准,IE、网景、火狐、Opera等主流浏览器都支持cookie。

因为HTTP是无状态协议,服务器无法从网络连接中知道客户端的身份。我该怎么办?给客户发个通行证就行了,一人一个,谁进去都要带自己的通行证。这样,服务器可以从通行证中确认客户的身份。这就是饼干工作原理。

Cookie实际上是一小段文本信息。请求客户机服务器,如果服务器需要记录用户的状态,使用response向客户机浏览器发出一个Cookie。客户端浏览器将保存Cookie。当浏览器再次请求网站时,浏览器将所请求的URL连同Cookie一起提交给服务器。服务器检查Cookie以识别用户状态。服务器也可以根据需要修改Cookie的内容。

2、会话

会话是一种服务器端技术。通过这项技术,服务器可以在运行时为每个用户的浏览器创建一个独占的会话对象。因为会话是用户浏览器专用的,所以用户可以在访问服务器的web资源时将数据放在自己的会话中。当用户访问服务器中的其他web资源时,其他web资源会从各自的会话中取出数据为用户服务。

四、Cookie类的主要方法

响应接口还定义了addCookie方法,该方法用于在其响应头中添加相应的Set-Cookie头字段。类似地,在请求接口中定义了一个getCookies方法,用于获取客户端提交的Cookie。

五、Cookie使用

1.使用cookie记录用户的上次访问时间。

第一次访问时,情况如下:

再次访问:

2.删除Cookie

3.从cookie中保存/检索中文

结果如下:

注意Cookie的细节

1.一个Cookie只能标识一种信息,它至少包含一个名称和设置值来标识信息。

2.一个网站可以向一个WEB浏览器发送多个cookie,一个WEB浏览器也可以存储多个网站提供的cookie。

3.一般来说,浏览器只允许存储300个Cookies。每个站点最多可以存储20个cookie,每个cookie的大小限制为4KB。

4.如果创建了一个cookie并发送给浏览器,默认情况下它是一个会话级cookie(即存储在浏览器的内存中),在用户退出浏览器后它会被删除。如果您希望浏览器将cookie存储在磁盘上,您需要使用maxAge并给出以秒为单位的时间。将最大时间限制设置为0会指示浏览器删除cookie。

六、Session简单介绍

在WEB开发中,服务器可以为每个用户的浏览器创建一个会话对象(session object)。注意:浏览器独占一个会话对象(默认情况下)。因此,当需要保存用户数据时,服务器程序可以将用户数据写入用户浏览器的独占会话中。当用户使用浏览器访问其他程序时,其他程序可以从用户的会话中取出用户的数据,为用户服务。

会话和Cookie之间的主要区别

1.Cookie是将用户的数据写入用户的浏览器。

2.会话技术将用户的数据写入用户的独占会话。

3.Session对象由服务器创建,开发者可以调用请求对象的getSession方法来获取Session对象。

七、Session基础知识

会话是一种服务器端技术。通过这项技术,服务器可以在运行时为每个用户的浏览器创建一个独占的会话对象。因为会话是用户浏览器专用的,所以用户可以在访问服务器的web资源时将数据放在自己的会话中。当用户访问服务器中的其他web资源时,其他web资源会从各自的会话中取出数据为用户服务。

当用户打开浏览器访问网站操作会话时,服务器会在服务器的内存中为浏览器分配一个会话对象,会话对象是浏览器专有的。

这个会话对象也可以看作是一个容器。会话的默认持续时间是30分钟,您可以修改它。

1.会话可以用来做什么?

1.网上商城中的购物车

2.保存登录用户的信息。

3.将同一用户的每个页面的一些数据放入会话中。

4.防止用户非法登录页面。

2.会话的基本用法

Servlet1:

Servlet2:

同一个浏览器访问Servlet1,然后访问Servlet2,结果如下:

不同的浏览器访问Servlet1,然后访问Servlet2,结果如下:

你可以看到此时名称为null,即没有从session对象中取出值,因为360浏览器并没有运行Servlet1来创建session对象,上面的Session对象是Chrome浏览器专有的。

3.会话生命周期

会话中属性的默认生存期是30分钟,可以通过修改web.xml文件来修改。

1、在Tomcat根目录下修改\conf\web.xml文件

& lt会话配置& gt& lt会话超时& gt30 & lt/session-time out & gt;& lt/session-config & gt;2.如果只需要为某个web应用设置,只需要修改对应web应用的web.xml文件即可。将上述代码添加到该web.xml文件中:

& lt会话配置& gt& lt会话超时& gt10 & lt/session-time out & gt;& lt/session-config & gt;除了设置默认的生命周期,最重要的是在程序中设置并调用setmaxinactiveinterval(int interval),其中间隔以秒为单位,这个方法设置发呆时间。例如,如果您将其设置为60秒,如果您在60秒内没有操作该会话,它将自动删除该会话。如果有,无论是设置还是读取属性,它都将从头开始计时。

session . setmaxinactiveinterval(60);八。会话实现原理服务器如何实现一个会话来服务一个用户的浏览器?

1.浏览器A首先访问Servlet1,此时它创建一个ID号为110的会话,然后Servlet1以Cookie的形式将这个ID号返回给浏览器A。

2.浏览器A继续访问Servlet2,那么这个请求会带来Cookie值:JSESSIONID=110,然后服务器会根据浏览器A传递的ID号在内存中找到这个会话。

3.浏览器B开始访问Servlet1,它的请求没有Cookie值JSESSIONID。由于它也需要使用Session,服务器将创建一个ID号为111的新会话。

4.浏览器B继续访问Servlet2,那么这个请求会带来Cookie值:JSESSIONID=111,然后服务器会根据浏览器B传递的ID号在内存中找到这个会话。

例如:

Servlet1:

Servlet2:

第一次访问Servlet1时,服务器会创建一个新的会话,并将会话的Id以cookie的形式发送给客户端浏览器,如下图所示:

如您所见,请求头中没有Cookie信息,但响应头中有这样一句话:

set-Cookie:JSESSIONID = 05a 94199 DDC 64311563740 cc 2c 78d 656;path =/CookieAndSession/;HttpOnly表示此时服务器通过Cookie将JSESSIONID属性传递回客户端。

然后访问Servlet2,如下图所示:

您可以看到Set-Cookie标头没有出现在响应标头中,但是Cookie标头出现在请求标头中:

Cookie:jssessionid = 05a 94199 DDC 64311563740 c 2c 78d 656,而这个头包含jssessionid,它的值就是我们之前的Set-Cookie中jssession id的值。

这就证明了之前举例说明的Session原理,即服务器可以针对不同浏览器区分不同会话的机制。

九、Session的简单应用

1.用户登录时验证验证码。

Index.jsp:

CodeServlet:

Web.xml:

这里用jelly-core-1.7.0.GA.jar生成一个验证码。如何使用它:

jelly-core-1 . 7 . 0 . ga . jar(http://www . blog Java . net/fancydeepin/archive/2014/08/03/jelly _ image . html)

访问http://localhost:8081/cookieandsession/index . JSP输入验证码,点击提交:

输入正确的验证码,页面将对结果做出响应:

输入错误验证码,页面响应如下:

输入正确的验证码,后台结果是:

输入错误验证码,后台结果:

2、实现简单的购物车

模拟数据库:

BuyBookServlet这个Servlet用于购买书籍:

运行结果:

3.防止用户非法登录页面。

比如我们的用户管理系统,只有登录成功后才能跳转到主页面,而不是直接绕过登录页面,进入主页面。这个应用程序非常常见。

当控制器LoginClServlet.java成功验证用户时,当前用户信息保存在会话对象中:

然后,在主页面的Main.java的开头,取出会话中登录用户的信息。如果信息是空,则是非法访问。直接跳转到登录页面,提示相关信息:

那么这里就有问题了。一个网站会有许多页面需要保护,防止非法访问。用这种方法不会很麻烦吗?

两种解决方案:

第一种方法是将这段验证用户的代码封装到一个函数中,每次都会调用这个函数。

第二:使用过滤器。

4.使用会话来防止重复提交表单

具体做法:

在服务器端生成一个唯一的随机标识号,技术上叫做Token,将这个Token保存在当前用户的会话域中。然后,令牌被发送到客户端的表单,表单使用隐藏字段来存储令牌。当表单被提交时,它与令牌一起被提交到服务器端。然后,服务器端判断客户端提交的令牌与服务器端生成的令牌是否一致。如果不是,则为重复提交,服务器端无法处理重复提交。如果相同,将处理表单提交,处理后将清除当前用户的会话域中存储的标识号。

在下列情况下,服务器程序将拒绝处理用户提交的表单请求:

1.存储的会话域中的令牌不同于表单提交的令牌。

2.当前用户的会话中不存在令牌。

3.用户提交的表单数据中没有令牌。

例如:

创建FormTokenServlet,用于生成令牌并跳转到token.jsp页面:

使用隐藏域在Token.jsp存储令牌,并将令牌提交给服务器:

TokenServlet处理表单提交:

运行结果如下:

十、用户禁用Cookie后的Session处理

这里有个情况。如果用户的浏览器禁用了Cookie怎么办?例如,我禁用了Chrome的Cookie,如下所示:

解决方法:URL重写

Servlet中的响应提供了重写URL的方法:

那么URL重写是什么意思呢?其实就是人为的给url附加JSESSIONID。例如,当我们修改之前编写的简单购物车时,ShowBook中所有的点击购买超链接都必须重写。

这是我们之前写的:

out . println(” & lt;tr & gt& ltTD >;+book . getname()+” & lt;/TD & gt;& lttd & gt& lta href = ‘ “+req . getcontextpath()+”/buybookservlet . html?id = “+book . getid()+” ‘ & gt;单击购买;);现在重写URL:

req . getsession();String url = “/MyCart/BuyBookCl?id = “+book . getid();URL = resp . encode URL(URL);out . println(” & lt;tr & gt& ltTD >;+book . getname()+” & lt;/TD & gt;& lttd & gt& lta href = ‘ “+URL+” ‘ & gt;单击购买;);请注意,在重写之前,必须调用或使用request.getSession()方法。

重写之前,访问ShowBookServlet的源代码是这样的:

重写后:

可以看到,url被重写后,参数jSessionid被自动附加到URL上,从而保证了即使Cookie被禁用,我们的会话也能继续正常使用。此时,当我们如下图查看购物车的地址栏时,可以清楚地看到参数jsessionid:

原文:https://www.cnblogs.com/Zender/p/7657516.html

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。
本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://51itzy.com/32633.html
(0)
上一篇 2023年 5月 15日 23:40
下一篇 2023年 5月 16日 08:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注