问题是,我能否使用 Spring 或 JS 区分 2 个页面,在一个浏览器中并行打开。例如,我不想要一个情况
- 用户打开窗口 1,其中包含一个选项列表,存储在会话中。
- 用户转到另一个页面并打开窗口 2,其中包含另一个同名选项列表,它们会覆盖会话中的选项
- 用户转到窗口 1,使用窗口 2 中的选项提交表单,并丢失窗口 1 中的所有内容。
页面上没有登录或任何内容来帮助区分并行会话。主要是在并行页面中进行这项工作
问题是,我能否使用 Spring 或 JS 区分 2 个页面,在一个浏览器中并行打开。例如,我不想要一个情况
页面上没有登录或任何内容来帮助区分并行会话。主要是在并行页面中进行这项工作
您可以为每个窗口使用不同的 id。此 id 可能来自表单中的隐藏字段,并由随机生成。
您首先在表单中添加一个隐藏字段,其中包含此表单的唯一 ID:
<input type="hidden" name="suffix" value="50bd324e7a" />
然后,将此值用作来自此表单的所有变量的后缀。会话键是字符串,因此为它们添加后缀以设置/获取值没有问题。
使用你的场景,它会像这样:
用户打开窗口 1,其中包含一个选项列表,存储在会话中。
将后缀添加到键中的存储数据,例如变量email
将存储在会话变量中email_50bd324e7a
。
用户转到另一个页面并打开窗口 2,其中包含另一个同名选项列表,它们会覆盖会话中的选项
这里也是一样,但它是不同的形式,具有不同的 id,因此变量名称会有所不同。
用户转到窗口 1,使用窗口 2 中的选项提交表单,并丢失窗口 1 中的所有内容。
在提交时,您读取隐藏字段的值并使用它从会话中获取数据。
另一种方法是直接使用那些唯一的 id 作为键,并在键下存储所有表单变量的数组。这个想法非常相似(也许代码会更干净)。
例如:
带有 id 的表单的所有变量50bd324e7a
都存储(作为映射)在名为 的会话变量中50bd324e7a
。因此,为了获得例如 form variable 的值email
,您需要调用session.getAttribute(50bd324e7a)
并从结果(这是一个映射)中获取 key 的值email
。