相关疑难解决方法(0)

浏览器会话存储.标签之间共享?

我在我的网站中有一些值,我希望在浏览器关闭时清除,我选择sessionStorage来存储该值,当选项卡关闭时清除它并在用户按f5时保持存储,但如果用户在不同的选项卡中打开一些链接这个值不可用.我如何在我的应用程序之间共享所有浏览器选项卡之间的sessionStorage值?

用例:将值放在某个存储中,在所有浏览器选项卡中保持该值可访问,如果所有选项卡都关闭则清除它.

if (!sessionStorage.getItem(key)) {
    sessionStorage.setItem(key, defaultValue)
}
Run Code Online (Sandbox Code Playgroud)

javascript cross-browser session-storage

123
推荐指数
5
解决办法
13万
查看次数

有没有办法识别JavaScript中的浏览器标签?

我需要能够识别我在浏览器中的标签.我是否可以通过浏览器获取一些信息来识别标签?我不需要知道任何其他选项卡,我只需要我所在选项卡的ID.它可以是随机或顺序编号,或日期时间戳,只要它保持相同的标签的生命.

我有一个客户端应用程序,通过HTTP连接到远程服务器,如果我在多个选项卡中打开它,每个实例需要自己唯一的ID或应用程序失败,所以我只需要一些与之关联的唯一编号只要该选项卡存在的选项卡(即,当我浏览提供此应用程序的站点时,页面刷新后存活的内容).看起来像是在浏览器中可以使用的明智之举,比如window.tabId - 这就是我所需要的.我有一个严肃的开发块,因为我无法通过这个似乎不存在的简单,简单,简单的解决方案.必须有一种方法(跨浏览器解决方案).

有任何想法吗?

javascript browser tabs uniqueidentifier

35
推荐指数
5
解决办法
6万
查看次数

在javascript中,如何从另一个浏览器窗口中唯一标识同一个基于cookied的sessionId的浏览器窗口

我的Web应用程序的用户可能打开了多个浏览器窗口并指向同一页面.我希望页面中某些内容的状态(通过ajax加载)在回发中保留.我可以存储在cookie中或存储在我的服务器上.无论哪种方式,我都想不出如何区分每个窗口.

例如,假设用户Bob有两个浏览器窗口打开ListOfSomething页面.每个列表都有一个LoadedPageNumber属性,我需要保留它.否则用户在刷新时总是在第1页结束.Bob可能已加载浏览器窗口1并将其指向第5页,然后加载浏览器窗口2并将其指向第14页.如果我只是根据会话ID存储该属性,则Bob将在窗口1中获取第14页(如果他刷新).

请注意,我的状态变量实际上比这个简单的例子复杂得多,而且我无法坚持它们可能会导致很大的问题(我的应用程序存在缺陷).

我需要某种浏览器窗口ID或其他东西.它当然需要是一个跨浏览器的解决方案(IE6 +,Wekbit?+,FF2 +)

有任何想法吗?

关于相关性的注意事项:请记住,这对于将较旧的基于表单的页面与较新的启用AJAX的项目混合的情况也很有用.有时您需要回发表单,并且您不希望丢失一些客户端状态值.

ajax persistence state

28
推荐指数
1
解决办法
4万
查看次数

管理多个选项卡的webapp会话数据/控制器流

我有一个Java Web应用程序,它在会话中存储一些数据.当用户与应用程序交互时,会话中的数据发生变化(例如,流程由控制器管理,每个控制器具有多个表单页面,在每个表单页面上,一些数据在会话中更新,流程转到下一个表单页面).

问题是一些用户向应用程序打开了多个选项卡,每个选项卡在流程中都有不同的步骤.此时会话中的数据混乱,因为选项卡共享同一会话(应用程序使用cookie托管会话).

告诉用户使用不同的浏览器以避免共享相同的会话ID(例如,一个Firefox窗口和一个IE窗口)不是一种选择,因为在某些时候肯定会有人忘记这样做而是使用制表符,从而弄乱他们的数据.

添加一些检测从另一个选项卡请求另一个流并向用户显示不允许这样的消息的验证不是一个选项,因为它对用户很生气,我们不希望这样做吗?:d

事实是,使用另一个选项卡对用户很有用,因为它们在使用应用程序时更有效,所以我保留了这个选项.但现在的问题是如何最好地管理更多标签的一个会话数据?

我想到的是让控制器在启动流时生成一个令牌,并将此令牌传递给每个表单页面,然后将其发送回标识自身.如果另一个选项卡在存在正在进行的流时请求相同的控制器操作,则生成另一个标记并将其传递.

基本上,我希望每个流都有一个令牌,在会话中我不仅会保留一组数据,而是为每个令牌提供一组数据,然后根据令牌匹配请求.

现在的问题是这种方法需要对应用程序进行大量的重写,我想知道是否存在管理这种情况的最佳实践,或者是否有人建议其他方法.我对这些想法持开放态度.

你遇到过这种情况吗?你是怎么处理的呢?

java session jsp servlets

23
推荐指数
1
解决办法
1万
查看次数

来自同一浏览器的laravel和多个会话

在我们的网络应用程序中,如果我使用单个浏览器,以用户A身份登录我们的应用程序,打开另一个选项卡并以用户B身份登录 - 用户A丢失其会话数据.我假设这是由于与用户代理共享的cookie.有没有办法用用户名连接其名称?这样会话可以在同一台机器上使用相同浏览器的并发登录用户之间共存?

我们使用Laravel 5.它有什么办法吗?

php laravel laravel-5

22
推荐指数
1
解决办法
2万
查看次数

如何在同一个来源上为iframe分别设置sessionStorage

关于localStorages的标准W3C标准说:

共享一个主机名的不同作者(例如,托管内容的用户)geocities.com共享一个本地存储对象.没有功能可以通过路径名限制访问.因此,敦促共享主机上的作者避免使用这些功能,因为对其他作者来说读取数据并覆盖它是微不足道的.

但对于sessionStorages,据说它确实为标签和窗口提供了单独的sessionStorages,甚至来自同一个来源.

但似乎iframe确实共享sessionStorage.

有没有办法在同一来源的via iframe上有单独的sessionStorage.

编辑:由于标签/窗口确实有单独的sessionStorage存在混淆,这里是一个示例页面.将代码保存在文件中,然后使用两个不同的选项卡将其打开.然后刷新一个选项卡5次,刷新另一个选项卡1次.你会看到数字不同.

<!DOCTYPE html>
<html>
<body>
    <div id="result"></div>
    <script>
        sessionStorage.setItem("counter", (parseInt(sessionStorage.getItem("counter"), 10) || 0 ) + 1);
        document.getElementById("result").innerHTML = sessionStorage.getItem("counter");
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Edit2:我到目前为止尝试使用的是iframe sandbox属性.但是我在iframe中遇到了一个错误,我根本不能使用sessionStorage.我不得不补充一下sandbox="allow-same-origin".但是,sessionStorage在所有iframe中再次相同.

提前致谢.

javascript browser iframe session-storage local-storage

12
推荐指数
2
解决办法
1476
查看次数

检测两个浏览器窗口是否对同一站点开放

我正在尝试检测用户是否在一个选项卡中打开了我的网站,然后在另一个选项卡中打开它.然后,这应该在新打开的选项卡上向用户显示警告.

现在我每秒都会向服务器发送一个"保持活跃"的ajax调用.然后,这将使用唯一ID在数据库中记录"上次活动"时间.加载新页面时,它会检查该用户(由userID标识)是否在最近2秒内处于活动状态.

这感觉非常低效.当用户刷新页面时,它也不能很好地执行.(只需不到2秒钟).我做了2秒的检查比keepalive调用更长,以允许更慢的连接.

问)我是以正确的方式进行这种方式还是有更简单的方法来做到这一点?我听说Gmail和Facebook可能会做类似的事情,但我找不到他们这样做的网站功能.


实际代码使用了许多内部函数,所以这里是一般的想法:

伪代码:

Page load;
[index] PHP: Save tabsessionid, userid, datecreated, lastactive, phpsessionid into database;
[index] JS: Every second, send tabsessionid to keepalive.php
[keepalive] PHP: Check if another session exists in the last 2 seconds
[keepalive] PHP:        If exists -> Return "-1"; else -> return "1";
[keepalive] PHP: Update tabsessionid's last active time.
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些解决方案,但警告新的选项卡,而不是较旧的选项卡似乎是在减少延迟/时间方面的棘手部分.

javascript php ajax jquery

10
推荐指数
1
解决办法
3226
查看次数

在标签之间共享会话

我有JAVA Web应用程序,我需要停止在浏览器选项卡之间共享会话,这意味着

用户打开浏览器,登录到他的帐户并在同一浏览器的新选项卡中打开特定页面.根据默认设置,会话将共享到新选项卡,用户将自动登录到新选项卡.任何人都可以告诉我这是如何停止的,所以我至少可以在几个敏感页面中限制它,如果不是整个应用程序.

session jsp java-ee browser-tab

7
推荐指数
1
解决办法
2万
查看次数

如何使用 Java 将会话限制为单个浏览器选项卡

我不希望在浏览器选项卡之间共享用户的 HTTP 会话。

例如,如果用户在选项卡一中登录系统,他可以看到他的所有个人资料详细信息。但是,当从另一个新选项卡(选项卡二)点击相同的 URL 时,它也会显示相同的用户配置文件详细信息。

我想将用户会话限制为仅打开第一个选项卡。如果打开另一个选项卡,则不应使用第一个选项卡的会话。有什么办法可以做到这一点吗?

html javascript java jakarta-ee

5
推荐指数
1
解决办法
3921
查看次数

如何为每个标签浏览器只设置一个会话?

我想将登录用户限制在一个会话中 - 甚至在浏览器选项卡周围。如果用户在另一个选项卡中加载页面将不会登录,登录时 - 所有其他会话将被破坏。

怎么做?

django django-sessions

5
推荐指数
0
解决办法
1322
查看次数

在Spring Security中为不同选项卡强制执行单独的会话

我在Web应用程序中使用Spring Security v 3.1.3。该应用程序具有在Spring Security中使用custom-filter自定义的单项登录表单。现在,我的配置允许用户在同一浏览器中从其他选项卡打开URL时自动登录该应用程序,这是Spring安全会话管理的默认行为。

我想确保每当用户登录应用程序时,会话都不应在不同选项卡之间共享。在打开新选项卡时,他应该获得登录页面,并且登录后将在同一浏览器中创建一个新会话。目前,我找不到任何使用Spring安全框架来做到这一点的方法。我不介意将JsessionID集成到URL中,但是如果有另一种方法会更好。

session spring spring-mvc spring-security

5
推荐指数
1
解决办法
1963
查看次数

将会话ID作为url参数传递的危害

所以我只注意到其中一个互联网银行网站将会话ID作为url参数传递.(见下图)

在此输入图像描述

我之前没有看到过';' 在url中,在这种情况下它位于'private;'之后.

1)这个';'有什么用?

2)为什么需要在互联网上最安全的互联网银行将会话ID作为url参数传递?

起初,我认为他们这样做是因为有些用户不允许使用cookie,但是如果他们允许的话,再次使用cookie,如果不是 - url,但我允许使用cookie,所以很明显不是这样的.

3)我猜他们应该有其他一些安全措施吗?他们可能是什么?

4)如果他知道其他有效的会话ID,他可以做什么?据我所知,如果你知道id,你可以很容易地登录其他人会话,因为它不难编辑cookie,并且更容易将该会话id作为url参数传递,特别是如果你有类似的东西:

session_id($_GET[sessionid]);

谢谢!

security cookies session sessionid web

3
推荐指数
2
解决办法
1万
查看次数

如何阻止浏览器在标签之间共享会话?

如何共享多个浏览器标签之间的会话?

我在JSP/Servlet应用程序中使用Spring Security,我想知道"我们怎样才能实现Spring Security的行为,用户在更改浏览器选项卡时必须再次登录?" .

免责声明 问题类似于 这个问题这个问题,但由于两个问题都太旧了(即4,7岁),我相信今天必须有某种方法来实现,不是吗?

javascript browser security jsp spring-security

2
推荐指数
1
解决办法
9021
查看次数