【问题标题】:Managing and differentiating parallel sessions in Spring MVC在 Spring MVC 中管理和区分并行会话
【发布时间】:2013-10-27 22:45:47
【问题描述】:

问题是,我能否使用 Spring 或 JS 区分 2 个页面,在一个浏览器中并行打开。例如,我不想要一个情况

  1. 用户打开窗口 1,其中包含一个选项列表,存储在会话中。
  2. 用户转到另一个页面并打开窗口 2,其中包含另一个同名选项列表,它们会覆盖会话中的选项
  3. 用户转到窗口 1,提交带有窗口 2 选项的表单,然后丢失窗口 1 中的所有内容。

页面上没有登录或任何内容来帮助区分并行会话。 主要是在并行页面中进行这项工作

【问题讨论】:

  • 也许有可能做这样的事情:onLoad(){window.session["session"] = getSession()} 而不是onClick(){setSession(window.session["session"]}

标签: spring session spring-mvc parallel-processing


【解决方案1】:

您可以为每个窗口使用不同的 id。此 id 可能来自表单中的隐藏字段,并且是随机生成的。


您首先在表单中添加一个隐藏字段,并保存此表单的唯一 ID:

<input type="hidden" name="suffix" value="50bd324e7a" />

然后,您将此值用作来自此表单的所有变量的后缀。 会话键是字符串,因此为它们添加后缀以设置/获取值没有问题。

使用你的场景,它会像这样:

  1. 用户打开窗口 1,其中包含一个选项列表,存储在会话中。

    将您的后缀添加到键中的存储数据,例如变量email将存储在会话变量email_50bd324e7a中。

  2. 用户转到另一个页面并打开窗口 2,其中包含另一个同名选项列表,它们会覆盖会话中的选项

    这里是一样的,但是形式不同,id不同,所以变量名也会不同。

  3. 用户转到窗口 1,从窗口 2 提交带有选项的表单并丢失窗口 1 中的所有内容。

    在提交时,您读取隐藏字段的值并使用它从会话中获取数据。


另一种方法是直接使用那些唯一的 id 作为键,并在键下存储所有表单变量的数组。这个想法非常相似(也许代码会更干净)。

例如:

id 为50bd324e7a 的表单的所有变量都存储(作为映射)在名为50bd324e7a 的会话变量中。因此,为了获得例如的值表单变量email,您需要调用session.getAttribute(50bd324e7a) 并从结果(这是一个映射)中获取键email 的值。

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多