![]() |
1
2
多年前,我在一个单窗口的Web应用程序上工作(预约会“Web2.0”)。我们只是启动了一个没有任何工具栏(没有后退按钮等)的新窗口,并禁用了右键单击。我们注意到创建了一个非常有用的会话导航系统。这足以防止几乎所有意外的重复浏览。这是一个内部网应用程序;很明显,我从不建议在一个普通的网站上做类似的事情。 就我个人而言,我不喜欢ping探测器的声音。我只是确保不会发生数据损坏。多个浏览器会话不是有效的借口…尽管我知道这会有什么问题。但是,如果您想在完美工作的代码之上添加一个ping检测器,那么它可能会对用户起到一个有用的提醒作用。 您可以在每个链接的末尾添加一个唯一的标记。如果唯一令牌被多次使用(例如,打开一个新窗口、书签、后退、前进),那么请求可能被拒绝。通过适当的跟踪,您可以确保在不使用有效路径的情况下,永远不可能从一个页面访问另一个页面。这种方法比ping更可靠(因为它由服务器控制),但可能会导致非常烦人的用户体验。 它的缺点是:修复应用程序以避免损坏任何数据。我知道这可能不是一件小事,我也不想轻视它。执行ping和类似的操作可能有助于使问题消失,但我向您保证,如果出现问题,最终会出现问题。-) |
![]() |
2
2
用户使用什么浏览器?
|
![]() |
3
2
您可以使用在客户机上创建的javascript和cookie,结合浏览器/dom窗口名必须是唯一的这一事实来实现这一点。很容易使用而不改变你的网站。 1) 第一次加载页面时,请检查会话cookie是否存在,如果不存在,请使用唯一的名称和值(某种代码)创建会话cookie(不要设置到期日期)。使用此cookie值设置浏览器/dom窗口名(而不是标题)。 2) 在随后的请求中,您需要检查dom窗口名称是否与cookie值相同-如果不重定向到错误页。 3) 记住在页面卸载时删除cookie,这样关闭窗口会删除cookie。 这是因为如果您尝试打开一个重复的窗口,该重复的窗口将不会具有与cookie值相同的窗口dom名称,并且您可以响应这个事实。 代码示例
|
![]() |
4
1
我主要关心的是,当存在网络延迟时,这是否会受到影响。也就是说,任何问题都可能来自于通常首先使用ping的问题。 |
![]() |
5
1
如果您真的处于绑定状态,并且无法修复应用程序以正常处理共享同一会话的多个浏览器实例,那么是的,这是一种很好的方法。 就其价值而言,我使用了完全相同的概念来强制并发使用许可证约束——因此它将检测到共享同一“密钥”的多个用户,在您的情况下,这就是会话。 我只会稍微修改您的方法,让ping消息包含客户端的日期/时间,这样您就可以避免在计算中处理网络延迟。 |
![]() |
6
1
今天太迟了。但您可能希望考虑在服务器上生成一个随机字符串并以隐藏的形式将其发送到前端的选项。在用户的会话对象中维护会话的最后一个随机键。每次用户向服务器发出请求时,都会将此随机密钥发回。检查浏览器中存储在会话中的随机键。如果它们不匹配,那么您可以告诉用户应该使用另一个窗口。对用户不太友好,但可以。 |
![]() |
7
0
对于Ajax应用程序,一个可能或可能无法使用的非常简单的解决方案是有一个页面(即一个URL,如home.whatever)。如果他们再次请求同一页,并且已经有一个有效的会话,那么您知道他们打开了一个新的选项卡或一个新窗口。但是,请注意,您将无法将其与刷新区分开来。 你的解决方案太复杂了。 |
![]() |
Garrett Rose · 会话数据如何在页面之间传递? 7 年前 |
![]() |
Viktor Rudi · PHP-更改会话值以更改语言 7 年前 |
![]() |
John_Cartor · PHP登录(会话问题) 7 年前 |
![]() |
glembo · 基于会话令牌认证问题的Laravel 5.6购物车 7 年前 |
![]() |
Rehan · 登录验证php后创建会话 7 年前 |
|
joko · 通过会话、两个目录使用多种语言 7 年前 |