我試圖找到解決這個問題:我有不能被打開一次以上,以避免會議重寫PHP應用程序的頁面。 我花了很多時間沒有找到任何解決方案!避免打開同一個頁面兩次
最後一個我想是使用窗口上的jQuery的「加載」和「卸載」事件。如果我在新窗口或新選項卡中打開相同的頁面,但它也會在我刷新頁面時阻止該頁面!
我真的不知道怎麼下去!我認爲這是一個信號量使用的簡單例子......但我無法用正確的方式對其進行編碼。
有什麼建議嗎? (PHP和JS的解決方案,歡迎)
我試圖找到解決這個問題:我有不能被打開一次以上,以避免會議重寫PHP應用程序的頁面。 我花了很多時間沒有找到任何解決方案!避免打開同一個頁面兩次
最後一個我想是使用窗口上的jQuery的「加載」和「卸載」事件。如果我在新窗口或新選項卡中打開相同的頁面,但它也會在我刷新頁面時阻止該頁面!
我真的不知道怎麼下去!我認爲這是一個信號量使用的簡單例子......但我無法用正確的方式對其進行編碼。
有什麼建議嗎? (PHP和JS的解決方案,歡迎)
不能由同一用戶打開不止一次,我相信。
你是如何使用jQuery的裝載和卸載的事件?在這裏集思廣益,如何使用load
在用戶的會話中設置一個信號量,該信號量將由unload
刪除。當然,我不確定即使瀏覽器崩潰或類似的未解決的技術問題,該事件是否也會引發火災。在這種情況下,你可能會遇到一個困難的問題,那就是你需要一個特定的超時時間,或者等待會話超時。
要解決,也許以後在頁面加載有執行每10秒,基本上更新旗語有點像一個計時器「的頁面仍然是開放的」,與當前的時間戳。如果加載時信號量存在,但時間戳超過10秒,則用戶正在刷新。
的問題是,你沒有獲得最終用戶的網頁當前在瀏覽器中打開。所以唯一的解決方案是讓你跟蹤用戶打開/關閉/切換到另一個頁面等的頁面。即使這並不完美,因爲用戶可以打開另一個瀏覽器進程。所以沒有完美的解決方案。
你可以用一個cookie嘗試:下一次在同一個頁面加載
我不認爲瀏覽器將能夠使刷新,而在另一個標籤/窗口負載之間的差異。
或者如果使用HTML5,你可以使用HTML5的客戶端網絡存儲,而不是cookies :) – Joset 2010-09-14 22:30:29
對不起,你們......你是對的! 代碼位將幫助我們所有的人:) 想我的腳本在運行script.php的HTML的script.php
我把
$(window).bind('load',
function(){
$.post(PATHTOLOCK.php);
});
$(window).bind('unload',
function(){
$.post(PATHTOUNLOCK.php);
});
在文件PATHTOLOCK.php我這樣做:
$_SESSION['flag']=true;
,並在文件PATHTOUNLOCK.php我這樣做:
$_SESSION['flag']=false;
在腳本的開頭。php我把
if($_SESSION['flag']==true){
echo "error";exit;
}
如果我在兩個窗口/標籤打開script.php一切工作正常。如果我刷新頁面它不工作,因爲我想的事件順序如下:上刷新
等等...每兩次刷新它的作品!
@mic我認爲這是行不通的。刷新是問題。 – tom 2010-09-14 22:39:03
@OTZ我也這麼想!但我如何保持頁面的軌跡?特別是封閉的頁面!再次,我如何區分一個已關閉的頁面和已刷新的頁面? – tom 2010-09-14 22:41:14
你能更好地解釋你在這裏的實際情況嗎?讓我看看,如果我明白,但...用戶來到Chrome的標籤script.php。您不希望用戶能夠在Chrome的第二個選項卡中加載script.php,是否正確?但同時,您希望用戶能夠刷新頁面?另外,這是出於可用性問題還是安全問題? – BBonifield 2010-09-15 18:50:49
我們可以在PHP中看到你的嘗試,併爲你的jQuery嘗試javascript。 – RobertPitt 2010-09-14 22:03:22
根據Jquery手冊,頁面刷新首先觸發'unload':http://api.jquery.com/unload/,以便在刷新時刪除信號量。看到代碼會更好,根據@RobertPitt – Fanis 2010-09-14 22:12:43