2013-05-10 213 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()