生成会话令牌

时间:2016-05-23 19:39:53

标签: php jquery ajax token server-side

我正在使用一个javascript文件,该文件对php文件(邮件发件人)进行ajax调用。

我不希望有人构建一个只使用正确的参数调用php页面的机器人,所以我希望其中一个参数是一个令牌字符串,然后php可以与存储在服务器端的字符串进行比较。

所以我创建了一个创建随机字符串并将其保存到storageSession的php,然后回应它。

我的JS有一个运行该PHP文件的ajax调用,以获取令牌......但由于某种原因,它没有。

不幸的是,我无法在这里写作我工作的地方,我无法安装chrome扩展程序(毕竟我不是程序员,只是一个不想让网站出现最糟糕漏洞的编辑)我无法看到家里的代码。

我希望我的记忆力很好。

function generateRandomString() {
  $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $charactersLength = strlen($characters);
  $String = '';
  for ($i = 0; $i < 20; ++$i) {
    $String .= $characters[rand(0, $charactersLength - 1)];
  }
  $_SESSION['token'] = $String;
  echo $String;
}


var myId;
$ajax(token){
  data: ''
  type: 'text'
  success{
    myId=token;
    console.log(myId);
}

控制台显示“未定义”。 为什么呢?

2 个答案:

答案 0 :(得分:3)

$_SESSION是一个数组。您必须以这种方式分配变量:

$_SESSION['token'] = "myValue";

[]不是()。此外,不要忘记在每个页面上开始您的会话。 要生成随机令牌,如果您使用的是PHP7,则可以使用random_bytes

导致类似的事情:

$_SESSION['token'] = random_bytes(12);

您提供的伪代码难以理解实际代码是什么。您能否提供确切的代码(如果您想保密,可以使用令牌生成除外)?

此外,你不应该尝试实现自己的安全系统,开发人员,甚至老年人,总是失败。例如,您可以使用this library,由已知的加密人员完成。

答案 1 :(得分:0)

function generateRandomString() {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $String = '';
    for ($i = 0; $i < 20; ++$i) {
        $String. = $characters[rand(0, $charactersLength - 1)];
    }
    $_SESSION['token'] = $String;
    echo $String;
}
var myId;
$ajax(token) {
    data: ''
    type: 'text'
    success {
        myId = token;
        console.log(myId);
    }
}