java jsessionid啥时候 生成的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java jsessionid啥时候 生成的相关的知识,希望对你有一定的参考价值。

如果客户端请求的cookie中不包含JSESSIONID,服务端调用request.getSession()时就会生成并传递给客户端,此次响应头会包含设置cookie的信息

如果客户端请求的cookie中包含JSESSIONID,服务端调用request.getSession()时就会根据JSESSIONID进行查找对象,如果能查到就返回,否则就跟没传递JSESSIONID一样;

  彻底的动静分离,对session并无影响,无论是直接浏览器url请求还是ajax请求都会在客户端cookie生成sessionid;如果要通过缓存进行自行管理session也是可以的。

参考技术A

获得session有两种情况,要么请求中没有SID,则需要创建;要么请求中包含一个SID,根据SID去找对应的对象,但也存在找到找不到的可能。但不管哪种情况都依赖于请求中的这个唯一标识,虽然对于编程人员来讲不需要去查看这个基本不会重复、编号很长的标识,但要想获取到与客户端关联的这个session对象一定要基于请求,所以在Request类型的API中包含获取到session对象的方法,代码如下所示:

HttpSession s = request.getSession(boolean flag);
HttpSession s = request.getSession( );

使用第一种获取session对象的方法时,

flag = true:先从请求中找找看是否有SID,没有会创建新Session对象,有SID会查找与编号对应的对象,找到匹配的对象则返回,找不到SID对应的对象时则会创建新Session对象。所以,填写true就一定会得到一个Session对象。

flag= false:不存在SID以及按照SID找不到Session对象时都会返回null,只有根据SID找到对应的对象时会返回具体的Session对象。所以,填写false只会返回已经存在并且与SID匹配上了的Session对象。

request.getSession()方法不填写参数时等同于填写true,提供该方法主要是为了书写代码时更方便,大多数情况下还是希望能够返回一个Session对象的。


服务器为不同的客户端在内存中创建了用于保存数据的Session对象,并将用于标识该对象的唯一Id发回给与该对象对应的客户端。当浏览器再次发送请求时,SessionId也会被发送过来,服务器凭借这个唯一Id找到与之对应的Session对象。在服务器端维护的这些用于保存与不同客户端交互时的数据的对象叫做Session。


图:

我啥时候应该生成混合伞和凤凰伞?

【中文标题】我啥时候应该生成混合伞和凤凰伞?【英文标题】:When should I generate a mix umbrella vs a phoenix umbrella?我什么时候应该生成混合伞和凤凰伞? 【发布时间】:2019-10-17 05:57:37 【问题描述】:

我不确定何时使用 mix 以及何时使用 phoenix 创建伞式应用程序。

我在网上阅读了很多文章,但他们不清楚使用 mix 而不是 phoenix 的原因,反之亦然。

混合给出:

- apps/
- config/

凤凰给予:

- build/dev/(consolidated/lib)
- apps/(app_name/app_name_web)
- config/(configs for different envs)
- deps/(stuffffff)

mix new [UMBRELLA NAME] --umbrella VS mix phx.new [UMBRELLA NAME] --umbrella

如果我想生成一个具有将提供 html/json 的应用程序的保护伞,我应该如何查看这些命令?

【问题讨论】:

如果有疑问,您可能根本不需要雨伞 请记住,很多时候您实际上可能不需要伞式应用程序。但是,如果您要选择是想要普通的 Elixir 伞还是凤凰伞。答案归结为您是否正在构建 Phoenix 应用程序。如果没有,那么坚持使用 Elixir 伞。如果是,那就做凤凰伞。你不会被你的决定所束缚。如果您从 Elixir 保护伞开始,后来决定在保护伞中添加一个 phoenix 项目,您仍然可以使用 mix phx.new 命令生成一个。 我正在阅读Phoenix In Action 1.4,它使用$ mix new --umbrella auction_umbrella。然后在apps/ 目录中,这本书会:$ mix new auction --sup 创建“应用程序”。然后在让应用程序自行运行后,它会创建应用程序的 Web 界面:.../apps$ mix phx.new.web auction_web --no-ecto。我猜 José Valim 是说如果你使用 $ mix phx.new --umbrella auction_web 那么这两个应用程序已经为你创建好了。 我的经验与此相反:以后迁移到伞式架构和项目结构要困难得多,而且您不会从伞式结构开始真正失去任何东西开始。 【参考方案1】:

归根结底,它们都是同一个东西。不同之处在于,Phoenix 已经生成了一个包含两个应用程序的保护伞,一个用于您的域,另一个用于 Web,如果您运行 mix new,则必须手动组装所有内容。因此,如果您正在构建 Web 应用程序,请使用 Phoenix,因为它可以让您在设置所有内容时抢占先机。

【讨论】:

以上是关于java jsessionid啥时候 生成的的主要内容,如果未能解决你的问题,请参考以下文章

JEE、J2EE、JSE、JME 和 JDK 有啥区别? [复制]

在啥条件下创建 JSESSIONID?

无状态弹簧应用程序 - JSESSIONID 仍然生成

如何使用 JSESSIONID 手动加载 Java 会话?

Jsessionid生成并传递到前端原理

jse之一——认识java