2014-04-10 58 views
0

我需要運行該代碼:運行PHP代碼接近使用Javascript

<?PHP 
    $pin=$_GET["pin"]; 
    unlink("../users/$pin/host.php"); 
    unlink("../users/$pin/votes.php"); 
    unlink("../users/$pin/guest.php"); 
    rmdir("../users/$pin"); 
    echo "Session ended"; 
?> 

它位於php/endsesh.php

基本上,當你啓動一個會話它創建你有一個文件夾PIN號碼,它放置一個主機,來賓和投票文件。

我需要這個PHP腳本時,標籤被關閉運行,因此它可以刪除所有這些文件(否則,我只是在我的超載與文件服務器)

到目前爲止我沒有運氣嘗試這種:

<script> 
window.onbeforeunload = function() { 
    alert("<?php include("http://musicdemo.hol.es/php/endsesh.php?pin=" . $_GET["pin"]; ?>"); 
    $.get("http://musicdemo.hol.es/php/endsesh.php?pin=<?php echo $_GET["pin"]; ?>"); 
    return false; 
    return "If you exit this page your session will not end. Please either allow the pop-up, by staying in this page and closing again, or click the link saying 'Close this session'"; 
} 
</script> 

既不alert$.get命令的工作。

+0

所以,基本上,你需要執行endsesh。當用戶關閉標籤的PHP? –

+0

注意:javascript無法執行php – Isaac

+1

@Isaac這是不正確的。 JS可以加載一個PHP頁面,這將導致服務器執行PHP代碼。 – krowe

回答

3

onbeforeunload是高度安全的,沙盒事件。它的設計完全是爲了讓人們知道「你確定要關閉這個窗口」的消息,所以我非常確定它不允許使用更高級的功能,比如ajax調用。這樣做會打開安全漏洞,允許惡意網站阻止您關閉窗口。

我認爲做一個ajax調用來清理服務器端會話文件不是合適的策略,因爲瀏覽器很容易崩潰,筆記本電腦可能會失去電源,用戶可能會失去網絡連接防止ajax調用等。不依賴於那個Ajax調用成功。

PHP已經通過在session_start()很好的會話處理能力和$ _SESSION全局變量,它已經有一個內置的清理功能爲到期老會話。

如果您絕對必須保留您當前的解決方案,我會做的是每小時,每天,每週,無論如何都運行cron作業,以搜索任何您24小時內未訪問過的文件並刪除他們。

另外我應該注意的是,採取$_GET並將其直接傳遞給unlink是最糟糕的,你可以在php中做的最不安全的事情之一。如果你有一臺服務器上運行,現在,你需要修復它立即,因爲惡意用戶可能會做這樣的事情http://musicdemo.hol.es/php/endsesh.php?pin=../../../../../../etc/passwd。如果「腳」是一個數字,你至少應該這樣做:

<?PHP 
$pin=$_GET["pin"]; 
$pin = (int) $pin; // ensure pin is converted to an integer 
unlink("../users/$pin/host.php"); 
unlink("../users/$pin/votes.php"); 
unlink("../users/$pin/guest.php"); 
rmdir("../users/$pin"); 
echo "Session ended"; 
?> 
+0

非常好的一點我沒有想到。 :) - –

0

該代碼看起來是不正確的,請嘗試:

<script> 
window.onbeforeunload = function() { 
    $.get("http://musicdemo.hol.es/php/endsesh.php?pin=<?php echo $_GET["pin"]?>"); 
    return false; 
    return "If you exit this page your session will not end. Please either allow the pop-up, by staying in this page and closing again, or click the link saying 'Close this session'"; 
} 
</script> 

它看起來像你的警戒線是搞亂這件事。

0
remove alert(). 
keep $.get. 

你見過apache日誌嗎?

也許你可以有一個權限問題(chmod +x endsesh.php).

我想我會給以exec(http://it2.php.net/function.exec)一試。

但在此之前,你必須明白,如果達到endsesh.php

+0

javascript工作或有解析錯誤?你有沒有檢查?警報( 「試」);將在那裏工作? – Lattanzio