コマンドラインを使用して自分のWebサイトに投稿しています。
以下のコードは私にとってはうまくいきます
curl -b cookies.txt -d title="$(my-own-sed-command)" -d taxonomy%5Btags%5D%5B1%5D="$(my-own-sed-command)" -d teaser_include=1 -d body="$(my-own-sed-command)" -d field_source%5B0%5D%5Burl%5D="$(my-own-sed-command)" -d changed= -d form_build_id=form-2bef00e4e4c6c53c1cedfc61e857186b -d form_token=883b4e7f69cdd1bf3311854732eff3f7 -d form_id=post_node_form -d op=Save http://www.mywebsite.com/node/add/post
通常、上記のコマンドを使用して1日に数回投稿します。しかし問題は;いつか2、3日休みます。 2〜3日後に、「form_token」と「form_build_id」の有効期限が切れました。
期限切れを防ぐために、「form_token」と「form_build_id」を7日間に延長する方法を教えてください。
どんな方法でも大歓迎です。コアのハッキング、このノードタイプ送信のトークンの無効化など。
TL; DR:これらの値は、
「form_token」に使用されるトークンは、次の関数呼び出しで使用して作成されたものです。drupal_get_token($form['#token'])
;同じ形式で、その関数呼び出しで変更される唯一の値は、session_id()
から呼び出されるdrupal_get_token()
です。
function drupal_get_token($value = '') {
$private_key = drupal_get_private_key();
return md5(session_id() . $value . $private_key);
}
drupal_get_private_key()
から返される値は、各Drupalサイトで一意です。これを変更する唯一の方法は、Drupal変数 "drupal_private_keyを削除することです。 "削除されることはありません(それを削除するサードパーティのモジュールがない場合)が、Drupalがインストールされると初期化されます。session_id()
によって返される値はログインしているユーザーが同じで、PHPセッションがまだ期限切れになっていない場合、drupal_get_token()
が呼び出されるたびに同じです。
「form_build_id」の値については、その値は完全にランダムで、次のコードを使用して drupal_prepare_form() から初期化されます。
if (isset($form['#build_id'])) {
$form['form_build_id'] = array(
'#type' => 'hidden',
'#value' => $form['#build_id'],
'#id' => $form['#build_id'],
'#name' => 'form_build_id',
);
}
$form['#build_id']
は drupal_get_form() の次のコードから初期化されます。
$form_build_id = 'form-' . md5(uniqid(mt_Rand(), TRUE));
$form['#build_id'] = $form_build_id;
「form_build_id」と「form_id」の値をPOSTデータで渡すと、次のコードが実行されます( drupal_get_form() を参照):
if (isset($_POST['form_id']) && $_POST['form_id'] == $form_id && !empty($_POST['form_build_id'])) {
$form = form_get_cache($_POST['form_build_id'], $form_state);
}
キャッシュにフォームが含まれている場合、「form_build_id」は再度生成されません。