function system_update_7086

Prepare the schema and data of the sessions table for hashed session ids.

Related topics

File

modules/system/system.install, line 3369

Code

function system_update_7086() {
    // Update the session ID fields' description.
    $spec = array(
        'description' => "A session ID (hashed). The value is generated by Drupal's session handlers.",
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
    );
    db_drop_primary_key('sessions');
    db_change_field('sessions', 'sid', 'sid', $spec, array(
        'primary key' => array(
            'sid',
            'ssid',
        ),
    ));
    // Updates the secure session ID field's description.
    $spec = array(
        'description' => "Secure session ID (hashed). The value is generated by Drupal's session handlers.",
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
        'default' => '',
    );
    db_drop_primary_key('sessions');
    db_change_field('sessions', 'ssid', 'ssid', $spec, array(
        'primary key' => array(
            'sid',
            'ssid',
        ),
    ));
    // Update all existing sessions.
    if (!variable_get('do_not_hash_session_ids', FALSE)) {
        $sessions = db_query('SELECT sid, ssid FROM {sessions}');
        while ($session = $sessions->fetchAssoc()) {
            $query = db_update('sessions');
            $fields = array();
            if (!empty($session['sid'])) {
                $fields['sid'] = drupal_hash_base64($session['sid']);
                $query->condition('sid', $session['sid']);
            }
            if (!empty($session['ssid'])) {
                $fields['ssid'] = drupal_hash_base64($session['ssid']);
                $query->condition('ssid', $session['ssid']);
            }
            $query->fields($fields)
                ->execute();
        }
    }
    // This variable indicates that the database is ready for hashed session ids.
    variable_set('hashed_session_ids_supported', TRUE);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.