2013-05-10 216 views
1

我想在用戶點擊網址時將ID從一個頁面傳遞到另一個頁面。可以有多個url,每個url對應一個單獨的id。基於點擊的網址,我想傳遞相應的ID和一個動作。目前我正在使用以下方法:從網址隱藏ID

<a href="Process.php?action=del&id='.$id.'"> 

但是,action和id在url中都可見。有沒有什麼辦法可以在url中隱藏這些信息,而不是通過url傳遞它? 另外,如果我使用隱藏字段傳遞它們,則可以使用瀏覽器開發工具訪問它們。我想讓他們安全,所以他們不能被讀取或修改。 我想爲了安全目的隱藏這個,所以沒有任何用戶可以看到這個

+0

你爲什麼要隱藏呢?爲了讓它變得漂亮嗎?使用有意義的名稱和URL重寫 – 2013-05-10 06:52:22

+0

爲什麼你想隱藏它..出於安全的目的? – 2013-05-10 06:56:56

+0

如果您在URL上顯示加密數據,可以嗎? – 2013-05-10 07:03:43

回答

3

僅在HTML中,你不能通過$_GET傳遞「隱藏」變量。

如果你真的想隱藏一些變量,當一個鏈接,用戶點擊,你可以使用JavaScript與自動提交的表單使用$_POST變量。

<form method="POST" action="yourpage.php" id="yourform" style="display:none;"> 
    <input type="hidden" name="hiddenfield" value="__" /> 
</form> 

<a href="" onclick="document.getElementById('yourform').submit();return false;" /> 

現在,在yourpage.php,你就可以得到$_POST['hiddenfield']值。


編輯

,我不認爲它可以是可能真正從開發工具隱藏價值。順便說一句,你也許可以使用會話,它會更「安全」 ..

例子:

// page1.php 
session_start(); 
$_SESSION['yourname'] = 'yourvalue'; 

// page2.php 
session_start(); 
$_SESSION['yourname']; // Contains 'yourvalue' 
+3

只是要清楚,他們不會隱藏使用的職位,他們只是不顯示在網址中。任何人都可以查看使用瀏覽器開發工具發佈的內容 – 2013-05-10 06:49:32

+1

我知道,只有會話會更隱藏..但我明白他只是不想在URL中顯示數據。 – Val 2013-05-10 06:51:33

+1

散列值也會更安全,但是在目標頁面上做一些額外的工作以從哈希值中獲取實際值 – Ortund 2013-05-10 07:15:14

-1

您可以使用base64,以這個(如果安全確實是一個大問題)。在將其傳遞給URL之前,您可以先編碼它,然後在接收端對其進行解碼。

檢查此網址:http://www.webtoolkit.info/javascript-base64.html

編輯:

請忽略上面的支架線。

基於下面的評論,Base64是真的不負責安全。更好的方法是使用服務器端語言來加密/解密值。通過JavaScript使用base64不是一個好主意。謝謝Bobby。

+0

「如果安全真的是一個大問題,你可以使用base64。」我......我......我什至不......什麼......?! – Bobby 2013-05-10 07:16:49

+0

鮑比 - 你能解釋一下你的意見,請.. – 2013-05-10 07:49:49

+2

的base64沒有給出安全它很容易進行解碼,並猜測它的的base64 – Robert 2013-05-10 07:57:07

0

隱藏ID(如果你的意思是安全的),最好的方法是對其進行加密。你應該使用MCRYPT函數來加密id。您可以加密既ID和你ACTION在一個字符串,然後通過這個字符串的URL,然後當你想使用它,你可以解密參數,並把它分解。當您在htaccess的與mod_rewrite的連接它,你可以得到的網址,如:

<a href="Process,Some title of yourpage,í,eHGxC•z»@」「§``"> to make it more "pretty" you can use base64 on this string. 

或使用Base64,mcrypt的和mod_rewrite的

<a href="Process,SWRlYW"> 

解密字符串,你應該使用BASE64_DECODE()mcrypt_decrypt()