避免两次打开同一页面

时间:2010-09-14 21:59:31

标签: php javascript jquery session

我正在尝试找到解决此问题的方法:我在php应用程序上有一个页面,无法打开多次以避免会话覆盖。 我花了很多时间没有找到任何解决方案!

我尝试的最后一个是在窗口上使用jquery“load”和“unload”事件。如果我在新窗口或新选项卡中打开同一页面它会正常工作但如果我刷新它也会阻止页面!

我真的不知道怎么回事!我认为这是一个信号量使用的简单例子......但我无法以正确的方式对其进行编码。

有什么建议吗? (欢迎使用php和js解决方案)

4 个答案:

答案 0 :(得分:1)

您可以尝试使用Cookie:

  1. 第一页加载,cookie(由会话服务器设置)
  2. 下次加载同一页面时,会读取Cookie
  3. 如果cookie在那里,请不要覆盖会话变量
  4. 我不认为浏览器能够在另一个标签/窗口中刷新和加载之间有所区别。

答案 1 :(得分:0)

我认为不能由同一个用户多次打开。

你是如何使用jquery的加载和卸载事件的?在这里进行头脑风暴,如何使用load在用户会话中设置信号量,该信号量由unload删除。当然,我不确定即使浏览器崩溃或类似的不可预见的技术问题,该事件是否会触发。在这种情况下,您可能会遇到一个需要特定超时的卡住,或等待会话超时。

要修复这个问题,或许在页面加载后有一个每10秒执行一次的计时器,基本上更新信号量类似“页面仍然打开”,以及当前时间戳。如果在加载时信号量存在但时间戳超过10秒,则用户正在刷新。

答案 2 :(得分:0)

问题是您无法访问当前在浏览器中打开的最终用户页面。因此,唯一的解决方案是让您继续跟踪用户打开/关闭/切换到另一个页面/等的页面。即使这并不完美,因为用户可以打开另一个浏览器进程。所以没有完美的解决方案。

答案 3 :(得分:0)

抱歉,伙计们......你说得对! 一些代码将帮助我们所有人:) 假设我的脚本是script.php

在script.php的html中我把

$(window).bind('load',
function(){
    $.post(PATHTOLOCK.php);
});
$(window).bind('unload',
function(){
    $.post(PATHTOUNLOCK.php);
});

在PATHTOLOCK.php文件中,我这样做:

$_SESSION['flag']=true;

在文件PATHTOUNLOCK.php中,我这样做:

$_SESSION['flag']=false;

在script.php的开头,我把

if($_SESSION['flag']==true){
echo "error";exit;
}

如果我在两个窗口/标签中打开script.php,一切正常。如果我刷新页面它不起作用,因为我认为事件序列如下:

  • 点击刷新
  • 未调用unload事件,因为页面未完全保留
  • script.php正在重新加载
  • script.php开头的检查失败,因为flag = true
  • script.php错误
  • 调用unload事件,因为页面已离开且flag = false
  • 点击刷新
  • 现在有效!

依旧......每两次刷新它都有效!