2012-06-16 45 views
2

我無法確定如何創建將破壞php會話的JavaScript函數。我有一個可點擊的鏈接,它會調用一個名爲destroyphpsess的函數。我認爲迄今爲止這是完全正確的。現在我需要定義javascript函數。這是我到目前爲止的代碼...創建JavaScript函數以銷燬php會話

if ($_SESSION['color'] == "") { 
    $var = "<a href='JavaScript:newPopup(\"http://www.yourfantasyfootballreality.com/register.php\");' class='two'>Register</a> | <a href='JavaScript:newPopup(\"http://www.yourfantasyfootballreality.com/signin.php\");' class='two'>Sign In</a>"; 
} else { 
    $var = "Hello, ".$_SESSION['color'] ."! | " . "<a href=\"http://www.yourfantasyfootballreality.com/index.php\" onclick=\"destroyphpsess()\" class='two'>Log Out</a>"; 
} 
echo $var; 

現在我需要定義javascript函數。這是我遇到麻煩的地方。這是基本的輪廓我到目前爲止...

function destroyphpsess() 
{ 
<?php 
session_destroy(); 
?> 
} 

如果有人可以幫助我的功能我將不勝感激! 謝謝。

+0

你爲什麼不使用Ajax和調用頁面,這將破壞會話 – Broncha

+3

+1與一個更好的問題回來了! :D – comfortablejohn

回答

11

您的JavaScript運行在客戶端,而您的PHP運行在服務器端。您無法通過JavaScript調用PHP函數。你有兩個選擇:

  1. 做一個AJAX調用該清除會話數據(推薦,一致性和這些東西服務器端的妥善清理)
  2. 清除PHPSESSID的cookie的服務器端腳本使用JavaScript (如果重新配置你如何處理會話,或者如果會話由URL參數處理將無法正常工作)
+0

我很確定你的意思是JavaScript運行客戶端,而PHP運行服務器端。 – Shoaib

+0

Doh!謝謝,修復......完成。 – Brad

+0

玉米帽正在影響你的大腦:-) – 2012-06-16 04:17:54

6

一個PHP會話通常利用保存客戶端的cookie。以下代碼將清除該cookie,從而取消會話連接。

document.cookie = 'PHPSESSID=; expires=Thu, 01-Jan-70 00:00:01 GMT;';

+1

+1我從AJAX調用中使用'session_destroy' ......我永遠不會想通過清理cookie來做到這一點,但我喜歡這個主意。 –

+0

這是我的另一個想法,但是我在想所有的客戶端。此代碼將離開會議掛在服務器端,直到它過期 – secretformula

+0

會在哪裏我把下面這行代碼?我會把它放在函數中嗎? –

0

大家都在說AJAX。這將是一個好主意,如果你想清理在服務器端cookie的一樣好,但我認爲,如果你知道什麼是AJAX,你恐怕早就用它...

我發現AJAX非常令人迷惑的時候我第一次遇到它。所以我建議看看並使用jQuery的AJAX功能。只包含一個函數的jQuery可能是過分的,但它可能更容易一些。

0

您的JavaScript運行在客戶端,而您的PHP運行在服務器端。您無法通過JavaScript調用PHP函數。您有兩種選擇:

對清除會話數據的服務器端腳本執行AJAX調用(建議爲了保持服務器端的一致性和正確清除) 使用JavaScript清除PHPSESSID cookie(不會工作,如果你重新配置你如何處理會話,或者如果會話由URL參數處理)