生成唯一键

时间:2011-07-03 17:04:45

标签: php

生成一个无法轻易猜到的唯一密钥的最佳方法是什么?

我想为帐户激活和引荐目的创建一个唯一密钥,其中包括一个校验和,以帮助防止用户轻易猜测其他用户激活或引荐密钥。

另外,在PHP中是否可以创建自己的会话密钥? 如果是这样,你会如何使这个独特?

非常感谢任何帮助。

7 个答案:

答案 0 :(得分:48)

不要过度复杂化:

$key = md5(microtime().rand());

答案 1 :(得分:12)

您可以使用uniqid生成唯一ID。查看UUID(通用唯一标识符)生成的PHP实现的注释。

答案 2 :(得分:7)

这是我在php中使用唯一键的方法:

$activation = md5(uniqid(rand(), true));

答案 3 :(得分:3)

只需使用PHP的内置函数uniqid()即可。 See PHP manual

答案 4 :(得分:1)

其他答案已经涵盖了有关创建(伪)唯一ID的主题,因此我只介绍如何设置自己的会话ID:

PHP中的会话ID会自动生成,但您可以设置自己的会话ID。请参阅session_id()如何操作。

示例性的工作原理如下:

$mySessionId = generate_my_session_id();
$oldId = session_id($mySessionId);
session_start(); // session must start _after_ setting the id.

答案 5 :(得分:0)

我使用这个脚本来随机生成密码,你可以改变一些东西,它可以很好地满足你的需要。

function generatePassword ($length) {
    $possible = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRESTUVWXYZ_"; // allowed chars in the password
     if ($length == "" OR !is_numeric($lengh)){
      $length = 8; 
     }

     srand(make_seed());

     $i = 0; 
     $password = "";    
     while ($i < $length) { 
      $char = substr($possible, rand(0, strlen($possible)-1), 1);
      if (!strstr($password, $char)) { 
       $password .= $char;
       $i++;
       }
      }
     return $password;
}

和你自己的会话密钥非常简单

start_session();
$_SESSION['NewSessionVariable']=$VariableToSet;

答案 6 :(得分:0)

你可以使用我以前写过的这个功能..

   function generateToken($type = null) {
  if($type) {
    return '<input type="hidden" name="token_id" value="'.$_SESSION['token_id'].'">';
  } else {
    if(!isset($_SESSION['token_id'])) {
      $token_id = md5(substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10));
      $_SESSION['token_id'] = $token_id;
      return $_SESSION['token_id'];
    }
    return $_SESSION['token_id'];
  }
}