当前位置: 首页 > 面试题库 >

isNew()如何判断会话是新会话还是已在使用中?

吉凯捷
2023-03-14
问题内容

如何调用isNew()会话对象,检查会话是一个新会话还是已在使用中?

我读到,isNew()如果客户端尚未使用会话ID进行响应,则返回true。但是这是什么意思 ?请解释


问题答案:

我读到,如果客户端尚未使用会话ID进行响应,则isNew()返回true。但是这是什么意思 ?

考虑服务器当前正在处理请求。关于会话处理,有两种方案。

  • 在新的会话方案中,服务器正在为用户/客户端创建一个新的会话。(客户端可能未在请求中提供会话ID,或者可能已提供服务器认为无效的会话ID。)Servlet的应用程序代码确定需要进行会话(例如,因为它具有某些信息,它希望存储在那里),并尝试使用“如果不存在则创建”标志来获取它。Servlet基础结构意识到没有当前会话,使用新的会话ID创建一个新会话,并将其保存在会话存储区中。请求完成后,会话ID返回给客户端;例如,作为cookie或附加了会话ID的URL。

  • 在现有的会话场景中,客户端已在请求中包含一个会话ID。例如作为会话Cookie或请求URL中的会话ID。Servlet基础结构会识别此ID,在其会话存储区中查找它,并(如有必要)重新创建HttpSession包含从会话存储区检索到的会话状态的对象。当Servlet的应用程序代码尝试访问该会话时,它将获取此HttpSession对象,而不是新对象。然后,会话状态可以由Servlet在处理请求时使用和更新。

在第一种情况下,isNew()将返回对会话对象的调用,true因为这是一个新会话。

在第二种情况下,isNew()将返回对会话对象的调用,false因为这不是新的会话。

如何在会话对象上调用isNew(),检查会话是新会话还是已在使用中?

Servlet基础结构知道发生了两种情况,因为它进行了会话创建或会话查找。最明显的实现isNew()private booleanHttpSession对象中包含一个字段,并作为的结果返回该字段的值isNew()。该字段将由servlet基础结构根据它如何获取会话对象进行初始化。



 类似资料:
  • 问题内容: 对于每个请求,您可以通过几种不同的方式来判断会话是否已经开始,例如: 要么: 但是,如果您启动会话然后将其关闭,它们都将失败。将返回前一个会话的ID,同时将对其进行定义。同样,如果您已经有一个活动会话,则此时调用将生成一个。有没有一种明智的方法来检查会话当前是否处于活动状态,而不必诉诸输出缓冲,关闭运算符()或其他类似hacky的方法? 编辑8/29/2011:向PHP 5.4添加了新

  • 问题内容: 最好的安全性是什么,如果未设置会话,则下次访问而不是重新创建会话时,加载时间会更好吗? 问题答案: 取消设置将破坏特定的会话变量,而将破坏该用户的所有会话数据。 实际上,取决于应使用哪个应用程序。只要记住以上几点即可。

  • 我正在Codeigniter中创建API。在这个API中,我为用户提供了一个登录函数。如果登录成功,我将在CI会话中设置用户数据,并将会话返回给用户。 现在,用户可以使用该会话ID来验证他自己的所有其他请求,如添加/更新/删除。基本上,我希望当用户发送下一个请求时,我可以根据他的会话ID验证他的凭据。 客户请求代码: 上面是一个从客户端到服务器的登录请求示例。在服务器端,服务器验证客户端提供的凭据

  • 问题内容: 会话文件通常存储在(例如)服务器上,并命名为。我一直在查看内容,但无法弄清楚它们是如何工作的。 从文件中获取变量名称和内容很容易。但是PHP如何知道哪个会话属于谁? session_id似乎是完全随机的,一个IP地址可以有多个用户,并且每个用户打开多个浏览器窗口时可以有多个会话。 那么它是怎样工作的? 问题答案: 在一般情况下: 会话ID在用户创建会话后发送给用户。 它存储在cooki

  • 我正在使用Spring Boot、Spring Security性和spring会话(redis)构建spring REST web应用程序。我正在使用SpringCloud和zuul代理按照网关模式构建一个云应用程序。在这个模式中,我使用spring会话来管理redis中的HttpSession,并使用它来授权我的资源服务器上的请求。当执行更改会话权限的操作时,我希望更新该对象,以便用户不必注销

  • 本文向大家介绍如何检查PHP会话是否已经开始?,包括了如何检查PHP会话是否已经开始?的使用技巧和注意事项,需要的朋友参考一下 在PHP中,我们利用一个内置函数session_start()来启动会话。但是,PHP脚本中面临的问题是,如果我们多次执行它会引发错误。因此,在这里我们将学习如何在不调用session_start()函数两次的情况下检查会话是否启动。 有两种方法可以解决此问题。 对于低于