除了使用$ _GET之外的选项

时间:2012-03-26 01:31:22

标签: php

GET是发布表单ID,发布网站ID或任何ID的便捷方法。 然而,它是不安全的,因为它泄露了访问者的身份。

我是否可以使用任何类似于GET格式的方法,我不需要提交表单,但我可以轻松地同时检索ID?

sorry, i am so green at it. how to use a session ? if use get , i can define 
$get?id=aaa for each link,but how can i achieve it in session?

我真正想做的事情:

在我的情况下,我想开发几个表单,每个表单都有一个id,比如formA,formB,formC ..

如果我使用get,我将定义<form id="myform" method="get" action="verify.php?id="formA"> 但是,由于它不安全,我如何使用session来做到这一点?

* Ans:把$ _session [id] ='formid'放进去。*

表单可以,但是.....

如果我想创建一个包含大量链接的页面,我该如何使用会话? 如何将会话绑定到链接?谢谢。

3 个答案:

答案 0 :(得分:4)

您可以使用$_SESSION传输用户无法修改的详细信息。

答案 1 :(得分:2)

GET方法将数据放入URL(这就是为什么你看到它们)。 POST方法将数据放入请求正文中,因此不会在地址栏中显示数据。 但是,您可以使用浏览器模块轻松找到请求正文的内容。

GET和POST方法以这种方式同样安全。 然而,像亚历克斯说你可以使用php会话,但只对用户不会改变的数据有用。

在您的情况下,如果您使用id和id识别了用户,则只需填写$ _SESSION [&#39; userid&#39;](变量名称是任意的),然后当用户提交for您将从会话中检索用户ID。

编辑: 对于你的网址:

http://mydomain.com?serviceid=1 call your service number one

您可以设置一个令牌系统,这意味着当前用户为您提供了一个似乎随机的哈希并允许他执行该服务。 您可以将此令牌生成放在脚本的开头:

session_start(); // To start php session
// We check if the current user has a token
if ( isset($_SESSION['usertoken'] ) )
{
   $token = md5( 'myubbersalt' . md5(time)  ); // The token is a random string (not to random there)
   $_SESSION['usertoken'] = $token; // The server now have set an action token for the user
}

然后,当您生成页面(带有服务链接)时,您可以在网址中添加令牌,如下所示:

echo 'http://mydomain.com?serviceid=1&tok=' . $_SESSION['usertoken'];

最后,当调用http://mydomain.com?serviceid=1时,请在内部检查令牌:

session_start(); // This should be added at the begining of your script
...
// We check if the usertoken match the service token
$canExecuteService = false;
if ( isset( $_GET['tok'] && isset($_SESSION['usertoken']) )
{
   if ( $_GET['tok'] == $_SESSION['usertoken'] )
   {
      $canExecuteService = true;
   }
}

所以你有一个变量告诉你是否可以执行服务。 令牌livelenght与php会话相同。另外2个不同的用户不能拥有相同的令牌(在这个简单的一代中,如果他们在同一时间执行页面,则两个用户可以共享相同的令牌)。此外,攻击者无法伪造令牌,因为此令牌是由可变来源生成的,并且只有您的网站才知道的盐腌制。

此致

答案 2 :(得分:1)

您不想使用$ _POST或$ _GET。请使用$ _SESSION。