地理位置保持浏览器会话持久

Posted

技术标签:

【中文标题】地理位置保持浏览器会话持久【英文标题】:Geolocation Keeping the Browser Session Persistent 【发布时间】:2012-07-03 08:21:27 【问题描述】:

我正在开发一个基于浏览器且专门针对移动浏览器的地理定位项目。我不会深入细节,但总体而言,该项目在项目的许多页面和部分中使用地理定位。问题似乎是,尽管总是在任何给定的浏览器上点击“接受”和“允许”,但当用户重新加载页面时,几乎每次都会提示他们重新启用位置身份验证。

这对我来说很奇怪,我去过带有地理位置的网站,它确实记得我允许它,即使在我在该网站上的期间而不是总是如此。因此,我想知道是否需要做一些特殊的事情才能在我的项目中长时间存储此身份验证?

目前我正在通过谷歌地图 API 使用基于 javascript 的地理定位,以及对非基于 ip 的位置的更新浏览器支持。我的项目由用户自行决定跟踪他们的位置,以便与他们相关的其他人可以看到他们在哪里,他们去过哪里,或者他们计划去哪里(如果他们输入了)。还有更多,但这是基础。从用户体验的角度来看,每次浏览器重新加载时都必须提示我的用户以重新验证该位置,这很烦人。

因此,任何人都能够提供任何建议,或对如何处理此问题的见解,我们将不胜感激。

【问题讨论】:

【参考方案1】:

Cookies会话

在检测到用户地理位置后,您应该将其存储在 Cookie 中。 来自服务器的每个请求都应该查看是否有一个 cookie 集(带有用户的位置)并对其采取行动。

过度简化的代码:

// get user location (via javascript)
navigator.geolocation.getCurrentPosition(function(position) 

  initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);


// ajax the server with the user location
$.post('ajax/set_user_location.php', initialLocation);

然后在服务器上获取 initialLocation 并将其保存在 cookie 中。

【讨论】:

确实有帮助,我将不得不使用它,但我很好奇这如何与那些正在四处走动的人联系起来?我不想跟踪每一个脚步,我很可能需要 GPS,但是如果有人从 a 点走到 b 点,然后在他们仍然登录的时候回来,我想找到新的当前位置,这是可能的还是浏览器需要在浏览器级别重新验证权限?本质上意味着它超出了我的控制范围 @chris,我个人会让它以这种方式执行。然后服务器将识别客户端并“假定”一个位置。当客户端运行代码时,javascript 将检查实际位置,如果它已更改,将联系服务器进行更新。重新检查代码将是惰性的(非阻塞、低优先级),并且会在 10% 的时间内每小时、每分钟运行一次,这实际上取决于站点/应用程序。

以上是关于地理位置保持浏览器会话持久的主要内容,如果未能解决你的问题,请参考以下文章

什么更持久,LocalStorage 或 PHP 会话?

如何使用 docker swarm 保持粘性会话(会话持久性)?

服务器重新启动时如何在节点 js 中保持持久会话?

应用中任何位置的持久视图

LVS的持久连接会话保持和高可用介绍

会话存储在 Rails 中的啥位置?