使用PHP在每个不同的服务器上创建唯一的ID

时间:2010-04-29 03:19:38

标签: php

我打算为用作自助服务终端的离线站点的用户创建我的数据库表。这些自助服务终端没有连接到网络上,也没有连接到彼此,他们有一个单独的网络服务器和数据库..什么是最好的我可以用来让每个售货亭上的这些用户拥有不同的唯一ID吗?我正在计划使用哈希,以便当我们将单个服务器上的每台机器中的所有数据组合在一起时,我们可以容纳每个唯一ID。

5 个答案:

答案 0 :(得分:1)

如果您可以完全控制ID的形成方式,则可以在首次设置时为每台计算机提供唯一的ID,然后您可以将该数据包含在用户的唯一ID中,这样它们就不会在计算机之间重叠。

如果您不想进行任何手动设置,可以使用某种硬件ID(如网络适配器MAC地址)作为计算机的唯一ID。

答案 1 :(得分:1)

我会使用PHP的uniqid()函数或MySQL的UUID()函数。

答案 2 :(得分:1)

使用简单的ini文件存储kiosk id并将其置于任何唯一的哈希值之前。

可以通过这种方式实现:

$config = parse_ini_file('./config.php');
$hash = $config['kiosk_id'].'_'.microtime();
//$hash = md5($hash); //looks more random, but can collide

答案 3 :(得分:0)

如果您需要零设置选项,请在创建用户时使用microtime(),将其转换为字符串,然后哈希(使用md5或其他类似内容)?由于精度以及机器时钟的任意变化,这应该最有可能为所有用户提供独特的功能。

如果您可以进行一些预先设置,请为每台计算机提供一个唯一的ID,并让它从该计算机上的某些用户特定数据项中进行哈希处理。

答案 4 :(得分:0)

您最好的选择是创建一个复合键,基于常规auto_increment列作为变化部分,以及一个不变的唯一每个kiosk标识符。主机名,IP地址,MAC地址,如果它有以太网卡(即使实际上没有使用),Windows SID等...

CREATE TABLE user
     user_id   auto_increment not null,
     kiosk_id   char(32) not null,
     PRIMARY KEY (user_id, kiosk_id),
     etc...
);

然后可以在主表中轻松组合。