Подчеркивает в моей сессии идентификатор - PullRequest
3 голосов
/ 14 февраля 2012

Я пытаюсь сохранить сеанс через запрос AJAX. Простой вызов session_start() не вызывает существующий сеанс, а создает новый идентификатор сеанса. Мое решение состояло в том, чтобы передать идентификатор сеанса в PHP через вызов AJAX, но это привело к следующей ошибке:

Предупреждение: session_start () [function.session-start]: идентификатор сессии слишком длинный или содержит недопустимые символы, допустимые символы: a-z, A-Z, 0-9 и '-,' в ...

Я считаю, что это потому, что текущий идентификатор сеанса содержит символы подчеркивания, но этот идентификатор сеанса выбирается при вызове session_id(), так как же он может содержать плохие символы?

Простой пример того, что я имею в виду:

JavaScript на странице (с использованием jQuery)

var sessID = "<?php echo session_id(); ?>";  //sessID contains underscore characters
$.get('/path/to/script.php',{sid:sessID}, function(data) {
    //do something
});

script.php

<?php
session_id($_GET['sid']);
session_start();
echo $_SESSION['some_key'];
?>

Так что в настоящее время я думаю проанализировать идентификатор сеанса на первой странице и заменить все плохие символы в нем, прежде чем пытаться его использовать, но я не уверен, что это правильно, или мне нужно искать решение в другом месте.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Так что получается, что подчеркивание не было частью моей проблемы вообще.Эта проблема была вызвана обработкой сеанса в Drupal, поэтому в целевом вызове AJAX было необходимо вызвать загрузчик Drupal, а не session_start.

//use Drupal bootstrap instead of session_start() to access session data set by Drupal
define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']);
$base_url = 'http://'.$_SERVER['HTTP_HOST'];
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);

Кредит для решения: http://www.csdesignco.com/content/using-drupal-data-functions-and-session-variables-external-php-script

2 голосов
/ 14 февраля 2012
$.get('/path/to/script.php',{sid:<?php echo session_id(); ?>}, function(data) {
    //do something
});

должно быть

$.get('/path/to/script.php',{sid:"<?php echo session_id(); ?>"}, function(data) {
    //do something
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...